0

以为我可以在谷歌上找到这个,但找不到。我正在尝试使用溢出来利用用 C 编写的二进制文件。在 gdb 中,我已经让溢出降落在正确的字节上以重定向函数返回,但似乎无法在那里获得正确的值以降落在我的代码上。

当您运行该程序时,它会要求标准输入提供两个输入,我需要能够为其中一些输入提供十六进制值。在提示符下转义\x##不起作用。我想我可以用 python 子进程库做一些事情。

到目前为止,导入子流程并在提示符下使用p=subprocess.Popen("bin", stdin=subprocess.PIPE)and 并p.stdin.write("sometext" + "\xhh\xhh\xhh\xhh")没有像我希望的那样工作。

有什么建议么?

谢谢!

4

1 回答 1

0

parent.py

import subprocess
import sys

p = subprocess.Popen([sys.executable, 'sub.py'], stdin=subprocess.PIPE)
p.stdin.write('foo')  # not even a newline seems to be required for this to work, oddly
# p.stdin.flush()  # optional; seems like not required

_, _ = p.communicate()  # this is required--otherwise it just seems to block

sub.py

print raw_input()

然后按预期运行parent.py输出。foo

如果您关心 的返回值communicate(),只需替换_, _out, err(或者例如out, _,如果您只关心 STDOUT);我只是喜欢用 标记未使用的变量_,虽然可以简单地完全忽略communicate()... 的返回值,但它看起来就像communicate什么都不返回。

请参阅:http ://docs.python.org/2/library/subprocess.html#subprocess.Popen.communicate

更新:

看起来你也可以:

p = subprocess.Popen([sys.executable, 'sub.py'], stdin=subprocess.PIPE)
_, _ = p.communicate(input='foo')
于 2013-10-02T08:05:16.333 回答