小编Bar*_*art的帖子

如何禁用可能的堆栈粉碎保护(EIP未被覆盖,EBP是)

我试图找出一步一步地进行藏匿粉碎的方法.我已经使用谷歌无济于事,我仍然不知道为什么我的EIP没有被覆盖.我有这个示例程序:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     char buf[10];
 7 
 8     strcpy(buf, argv[1]);
 9     printf("Done.\n");
10     return 0;
11     
12 }
Run Code Online (Sandbox Code Playgroud)

它是用编译的

gcc -g -o prog main.c
Run Code Online (Sandbox Code Playgroud)

当我放入很多AAAAAA时,我得到SEGV和寄存器EBP(以及argc和argv地址被覆盖:

Program received signal SIGSEGV, Segmentation fault.
0x08048472 in main (argc=<error reading variable: Cannot access memory at address 0x41414141>, argv=<error reading variable: Cannot access memory at address 0x41414145>)
    at main.c:12
12  }
(gdb) info reg
eax            0x0  0
ecx            0x41414141   1094795585
edx            0xb7fbb878 …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly gcc buffer-overflow

2
推荐指数
1
解决办法
1894
查看次数

标签 统计

assembly ×1

buffer-overflow ×1

c ×1

gcc ×1

x86 ×1