CTFの問題をpythonを使って解いているのですが、
python2,3のprint関数の動作で疑問があるので質問しています。
CTFの問題としては、バッファオーバーフローを発生させた後、
リターンアドレス(ex. 0x78563412)に書き換える問題で、以下をそれぞれ実行しました。
$ python2 -c "print('A'*88+'\x12\x34\x56\x78')" | ./progA $ python3 -c "print('A'*88+'\x12\x34\x56\x78')" | ./progA
pythonのバージョン以外は全く同じコードですが、
python2ではリターンアドレスの書き換えが成功し、python3では書き換えが失敗しています。
python2とpython3では、プレフィックス\xのバイト値をprintした場合の動作がことなるようですが、
python3でもpython2と同様の動作にするには、どうすればよいのでしょうか?
あなたの回答
tips
プレビュー