以为我可以在谷歌上找到这个,但不能。我试图利用溢出来利用用C语言编写的二进制文件。在gdb中,我在正确的字节上有溢出着陆以重定向函数返回,但似乎无法在我的代码上获得正确的值。
当你运行程序时,它会从stdin请求两个输入,我需要能够为其中一些提供十六进制值。像\x##
这样的转义在提示符下不起作用。我想我可以用python子进程库做点什么。
到目前为止,导入子流程并在提示时使用p=subprocess.Popen("bin", stdin=subprocess.PIPE)
和p.stdin.write("sometext" + "\xhh\xhh\xhh\xhh")
并不像我希望的那样有效。
有什么建议吗?
谢谢!
答案 0 :(得分: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')