Wie kann ich das Linux-Terminal verwenden, um nur Teile der Programmeingabe weiterzuleiten, die mit harten Zeichenfolgen verknüpft sind?

1

Ich verstehe, dass ich XARGs wie folgt verwenden kann:

echo "-i inputfile.raw -o outputfile.jpg" | xargs -t ./myprogram

Ich teste die Anwendung jedoch fuzz und habe einen Fuzzer, der so funktioniert:

echo "some text" | myfuzzer Ausgabe: "@ om3 t9gxt"

Mit anderen Worten, mein Fuzzer nimmt eine Zeichenfolge und führt einige Permutationen darauf aus und gibt dann eine zufällige Version davon aus.

Der Trick ist, ich muss "-i inputfile.raw -o outputfile.jpg" durch myfuzzer umleiten, damit es mutiert ist, ABER ich muss die Teile -o, -i, .raw und .jpg BEHALTEN. Und zum Schluss übergeben Sie die Ausgabe wie folgt an myprogram:

echo "-i [email protected] -o outpuF$tfFAFAile.jpg" | xargs -t ./myprogram

Ich muss also irgendwie festlegen, dass nur die Dateinamen über myfuzzer geleitet werden sollen, aber nicht die oben genannten Erweiterungen und Flags. Andernfalls werden sie auch permutiert und myprogram erkennt die Argumente nur, wenn sie die richtigen Flags und Erweiterungen haben ... Aber rekonstruiere trotzdem eine Zeichenkette, um sie in mein Programm einzufügen.

Wie kann ich das mit Bash machen?

the_endian
quelle
Wie wäre es, wenn Sie die unveränderlichen Teile als Anführungszeichen und die zu entstellenden Teile als Befehlsersetzung verwenden? Beispielsweise "-i" "echo inputfile | myfuzzer" .raw -o "...
dsstorefile1

Antworten:

1

Sie könnten zum Beispiel verwenden read in einer Unterschale

echo "inputfile outputfile" | myfuzzer | (read -a arg; echo "-i ${arg[0]}.raw -o ${arg[1]}.jpg" )
Felix Palmen
quelle