我正在尝试复制堆栈缓冲区溢出。这是我的代码
#include <stdio.h>
int main(int argc, char *argv[]) {
char x[1];
gets(x);
printf("%s\n", x);
}
我在32位机器上编译它,这意味着每个内存地址长度为4个字节。由于每个字符都是1个字节(使用sizeof验证),当我输入“AAAAA”作为输入时,我期待堆栈缓冲区溢出(比x可以容纳的字节多1个字节)。但是,在我输入13 As之前没有任何反应,此时我收到“非法指令”错误。 14导致“分段错误”。
问题
我看过Trouble replicating a stack buffer overflow exploit,但我无法理解答案。
这是我的汇编转储:
(gdb) disassemble main
Dump of assembler code for function main:
0x0804844d <+0>: push %ebp
0x0804844e <+1>: mov %esp,%ebp
0x08048450 <+3>: and $0xfffffff0,%esp
0x08048453 <+6>: sub $0x20,%esp
0x08048456 <+9>: lea 0x1f(%esp),%eax
0x0804845a <+13>: mov %eax,(%esp)
0x0804845d <+16>: call 0x8048310 <gets@plt>
=> 0x08048462 <+21>: lea 0x1f(%esp),%eax
0x08048466 <+25>: mov %eax,(%esp)
0x08048469 <+28>: call 0x8048320 <puts@plt>
0x0804846e <+33>: leave
0x0804846f <+34>: ret
End of assembler dump.
答案 0 :(得分:1)