缓冲区溢出问题
在我引用这个网站后,我想要模拟一个简单的缓冲区溢出错误
我的环境是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
看起来这两个地址的模式是相同的,但指令不同。
有人可以帮助我并解释为什么会发生这种情况。
多谢!
After I reference this website, I want to simulate a simple buffer overflow bug
My environment is ubuntu 10.10
gcc version is 4.4.5
I also download the execstack to enable the executable stack of my file.
the following is my code
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;
}
I use gcc -fno-stack-protector -g -static -o main.out main.c to compile my source code.
However when I use gdb to debug this executable file,
something weird happened.
here is the gdb output looks like:
(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
It seems like the the pattern of these two address are the same, but the instructions are different.
can somebody help me and explain why this happen.
thanks a lot!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
肯定存在缓冲区溢出,但是这一行
存储每个位置中代码的地址,而不是代码数组的内容。
You have a buffer overflow for sure, but this line
stores the address of code in each location, not the content of the code array.