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