-1

そのため、プログラムでバッファ オーバーフローを実行する必要があるラボがあります。GCC にはバッファー オーバーフロー保護があることを既に確認しており、コンパイル時に -fno-stack-protector フラグを使用して無効にする必要があることがわかりました。それを乗り越えた後、gdb を使用してコードを逆アセンブルしたところ、プログラムをアドレス 0x4005b1 にリダイレクトしたいことがわかりました。

しかし、ユーザー入力を入力するとき、b1 の 16 進値を ASCII で入力するにはどうすればよいですか?

プログラムがユーザー入力を求めるとき、b1 値をエスケープする方法があります。次のようなもの: aaaaaaaaaaaaaaaaaaaaaaaaaaa@^E\xb1 。通常、プログラムをコンパイルしたばかりのとき、アドレスは 0x040000 付近から始まりますが、-fno-stack-protector を使用すると、はるかに後のアドレスで開始されるため、戻りアドレスを 0x4005b1 にリダイレクトする必要があります。b1 に入る方法がない場合、これを回避する別の方法は何ですか? プログラムをリンクして特定のアドレスから開始することはできますか? その他のヘルプや提案は大歓迎です。

4

1 に答える 1

0

一連の nop でプログラムを開始すると、アドレスの下位バイトにある程度の柔軟性があります。

特殊文字の入力は、使用しているリーダーとライン バッファー コードによって異なります。たとえば、GNU readline は Compose キーを使用して特殊文字を入力します。

于 2012-09-30T21:52:10.263 に答える