命令在终端中正常运行时 system() 失败
system() fails while the command runs fine in the terminal
这令人沮丧。我正在编写一个 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 文件描述符。
万分感谢!
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'");
这令人沮丧。我正在编写一个 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 文件描述符。
万分感谢!
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'");