缓冲区溢出问题

时间:2011-05-01 18:47:27

标签: c gdb buffer-overflow

在我引用this website之后,我想模拟一个简单的缓冲区溢出bug 我的环境是ubuntu 10.10
gcc版本是4.4.5
我还下载了execstack以启用我文件的可执行堆栈 以下是我的代码

char code[] = "\x90\x90\x90\x6a\x00\xe8\x39\x07\x00\x00\x90\x90\x90";<
char msg[] = "run !!\n";
int main()
{     
     int *ptr;     
     int i;  
     for(i=1;i<128;i++){     
          ptr = (int *)&ptr + i;
          (*ptr) = (int)code;   
     }    

     return 0;
}

我使用gcc -fno-stack-protector -g -static -o main.out main.c来编译我的源代码。
但是,当我使用gdb调试此可执行文件时,
发生了一件奇怪的事 这里的gdb输出如下:

(gdb) x/i 0x8048492
   0x8048492 <__libc_start_main+402>:   call   0x8048bd0 <exit>
(gdb) x/5b 0x8048492
0x8048492 <__libc_start_main+402>:  0xe8    0x39    0x07    0x00    0x00
(gdb) x/i 0x80ce02e
   0x80ce02e <code+6>:  call   0x80ce76c <_dlfcn_hooks+44>
(gdb) x/5b 0x80ce02e
0x80ce02e <code+6>: 0xe8    0x39    0x07    0x00    0x00

这两个地址的模式似乎相同,但说明不同 有人可以帮助我并解释为什么会发生这种情况 非常感谢!

1 个答案:

答案 0 :(得分:2)

肯定有缓冲区溢出,但是这行

 (*ptr) = (int)code;

在每个位置存储代码的地址,而不是代码数组的内容