如何使用 Linux 终端仅通过管道传输与硬字符串连接的部分程序输入?

如何使用 Linux 终端仅通过管道传输与硬字符串连接的部分程序输入?

我知道我可以像这样使用 xargs:

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

但是,我正在对该应用程序进行模糊测试,并且我有一个工作方式如下的模糊测试器:

echo "some text" | myfuzzer 输出:“@om3 t9gxt”

换句话说,我的模糊测试器获取一个字符串并对其执行一些排列,然后输出它的随机版本。

诀窍是,我需要通过 myfuzzer 重定向“-i inputfile.raw -o outputfile.jpg”以使其发生变异,但是,我需要保留 -o、-i、.raw 和 .jpg 部分...最后将输出传递给 myprogram,如下所示:

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

所以我需要某种方式来指定我只希望文件名通过 myfuzzer 进行定向,而不是前面提到的扩展名和标志,否则它们也会被排列,并且 myprogram 将无法识别参数,除非它们具有正确的标志和扩展名......但仍然重建一个字符串以输入到 myprogram 中。

我如何使用 Bash 来实现这一点?

答案1

例如,您可以read在子 shell 中使用

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

相关内容