いくつかの単純なバッファ オーバーフローを試しており、EIP を制御できますが、厳密な文字セットに制限されているようです。
たとえば、次のことを行う python スクリプトがあります。
buff = "A" * 128
buff += struct.pack("<L", 0x42424242)
sys.stdout.write(buff)
これにより、EIP が 0x42424242 に正しく上書きされます。たとえば、0x42424242 の値を 0x42434445 に変更しても、引き続き機能します。
しかし、0x804843b のような実際のアドレスを入力するとすぐに、私の EIP は 0x000000 のような無効なアドレスに変更されます。
基本的に、アルファベット文字に解決されない 0x42424242 の代わりにここに入力するすべてのアドレスは、無効な EIP アドレスを取得します。
作品:
buff += struct.pack("<L", 0x42424242)
buff += struct.pack("<L", 0x45454545)
buff += struct.pack("<L", 0x41424344)
また、上記のすべては、AAAA EEEE ABCD のように印刷するとアルファベット文字になります。
動作しません:
buff += struct.pack("<L", 0x804843b)
印刷すると、次のような文字も表示されます: ;�</p>