Mac OS X を使用しています。バッファ オーバーフローの脆弱なプログラムを作成しました。
#include<stdio.h>
#include<string.h>
int neverCalled() {
puts("You got me to be called");
return 0;
}
int main() {
puts("Name: ");
char name[64];
gets(name);
return 0;
}
0x414141...
また、88 個の「A」( )を含む入力ファイルを作成し、0x700E000001000000
gdb で実行する場合:
(gdb) run < input
私は出力を得ます:You got me to be called
そしてEXC_BAD_ACCESS
エラー。プログラムの悪用に成功したことを意味します。
ターミナルで実行すると:
$ ./vulnerable < input
私は出力を取得します:Segmentation fault: 11
そしてそれ以上のものはありません。
gdb ではバッファ オーバーフローが機能するのに、通常の端末では失敗するのはなぜですか。