我正在使用 Mac OSX。我创建了一个缓冲区溢出易受攻击的程序:
#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;
}
我还创建了一个包含 88 个 "A" ( 0x414141...
) 的输入文件和0x700E000001000000
在 gdb 中运行时:
(gdb) run < input
我得到输出:You got me to be called
然后是一个EXC_BAD_ACCESS
错误。这意味着我成功地利用了该程序。
在终端运行时:
$ ./vulnerable < input
我得到了输出:仅此Segmentation fault: 11
而已。
为什么我的缓冲区溢出在 gdb 中有效,但在普通终端中失败。