0

Googleでこれを見つけることができると思っていましたが、できませんでした。オーバーフローを使用して、C で記述されたバイナリを悪用しようとしています。gdb では、関数の戻り値をリダイレクトするために正しいバイトにオーバーフローが発生しましたが、コードに着陸するための正しい値を取得できないようです。

プログラムを実行すると、stdin からの 2 つの入力が求められます。これらの一部には 16 進数の値を指定できる必要があります。like のエスケープ\x##は、プロンプトでは機能しません。Python subprocess ライブラリで何かできると思います。

これまでのところ、サブプロセスのインポートとプロンプトでの and の使用p=subprocess.Popen("bin", stdin=subprocess.PIPE)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 に答える