在终端中命令正常运行时,system()失败

时间:2020-06-26 20:23:17

标签: bash shell syntax sh dd

这令人沮丧。我正在编写一个C程序,需要创建一个自我修改的dd,即dd能够在运行 [ifd = open(stdin)和ofd = open(/ proc / self / mem)的情况下对其自身进行修改]

当我直接在终端中运行以下命令时,setarch命令将设置ADDR_NO_RANDOMIZE标志,并成功创建一个自我修改的dd。但是,当我通过system()运行它时,它会失败并显示错误。

system( "setarch x86_64 -R dd of=/proc/self/mem bs=1 seek=$(( 0x555555554000 + 0xa823 )) conv=notrunc 10<&0 11<&1");

也许我缺少一些明显的东西,因为我不太擅长shell编程。

错误如下:

dd: unrecognized operand ‘10’
Try 'dd --help' for more information.

注意:我已经使用10和11在代码中复制了stdin和stdout文件描述符。

感谢一百万!

1 个答案:

答案 0 :(得分:4)

POSIX sh仅保证支持从0到9的FD。

如果需要更高的FD,则应在bash或其他支持此命令的shell中运行命令:

system("bash -c 'setarch x86_64 -R dd of=/proc/self/mem "
       "bs=1 seek=$(( SEGMENT + OFFSET )) conv=notrunc 10<&0 11<&1'");
相关问题