Как я могу использовать терминал Linux для передачи только части ввода программы, соединенных с жесткими строками?

290
the_endian

Я понимаю, что могу использовать xargs вот так:

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

Тем не менее, я тестирую приложение и у меня есть фаззер, который работает так:

echo "some text" | myfuzzer Вывод: "@ om3 t9gxt"

Другими словами, мой фаззер берет строку и выполняет с ней некоторые перестановки, а затем выводит ее случайную версию.

Хитрость в том, что мне нужно перенаправить "-i inputfile.raw -o outputfile.jpg" через myfuzzer, чтобы он мутировал, НО мне нужно ДЕРЖАТЬ части -o, -i, .raw и .jpg .. И, наконец, передать вывод в myprogram следующим образом:

echo "-i inpu$@tfifsa4le.raw -o outpuF$tfFAFAile.jpg" | xargs -t ./myprogram

Поэтому мне нужен какой-то способ указать, что я хочу, чтобы имена файлов направлялись только через myfuzzer, но не через вышеупомянутые расширения и флаги, иначе они тоже будут переставлены, и myprogram не будет распознавать аргументы, если у них нет правильных флагов и расширений. ... но все же восстанавливаю строку для подачи в myprogram.

Как я могу сделать это с помощью Bash?

1
Как насчет сохранения неизменяемых частей в виде строк в кавычках и размещения тех, которые должны быть искажены, в качестве подстановки команд? Например, "-i" `echo inputfile | myfuzzer` ".raw -o" ... dsstorefile1 6 лет назад 0

1 ответ на вопрос

1
Felix Palmen

Вы можете, например, использовать readв субоболочке

echo "inputfile outputfile" | myfuzzer | (read -a arg; echo "-i $.raw -o $.jpg" )