微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Ubuntu 11.10上粉碎堆栈

当您尝试覆盖$esp指针时,是否有任何人遇到以下问题?

当然尝试合法的缓冲区大小始终有效!但是,当您尝试增加缓冲区大小以覆盖$esp并且您设法成功触摸$esp的第一个字节,第二个字节或第三个字节时,它可以正常工作.但是,只要您尝试覆盖$esp的整个4个字节,它就会完全改变它的内容以及地址.它不再显示41s,因为我使用“A”来填充缓冲区.我附上了一个屏幕截图,可能会更详细地解释.谢谢大家.

#include <stdio.h>
#include <string.h>
int main(int argc,char** argv)
{
    char buffer[500];
    strcpy(buffer,argv[1]);
    return 0;
}
这与在32位非PAE Ubuntu内核中实现 NX emulation以及引发cpu异常有关.对于NX仿真行以下的内存区域(即“在”仿真的NX区域内“:从地址0到程序文本段的末尾 – 小于/ proc / $pid / maps中此二进制文件的0x08049000结束地址),在EIP登陆实际无效地址后交付段错误.对于线路上方的地址,故障通过报告故障的不同路径触发,而不会将EIP前移到故障地址,而是停留在导致故障的“ret”指令上.

你可以在gdb中看到这个:

(gdb) x/1i $pc
=> 0x8048454 <main+64>: ret    
(gdb) info reg esp
esp            0xbffff54c       0xbffff54c
(gdb) x/wx $esp
0xbffff54c:     0x41414141

您还可以看到dmesg输出中报告故障的方式不同.这是与“508”尝试相关的输出

[  585.913896] a.out[1528] general protection ip:8048454 sp:bff1e8ec error:0 in a.out[8048000+1000]

这是“507”:

[  598.999760] a.out[1531]: segfault at 414141 ip 00414141 sp bfcac2c0 error 4 in libc-2.13.so[5e7000+178000]

如果你在安装了PAE内核的情况下启动,sudo apt-get install linux-image – $(uname -r)-pae,并且你有一个支持PAE的cpu,你会看到你期望的行为(因为NX仿真会被禁用以支持硬件NX),并且所有4次尝试将与预期的EIP进行分段.

原文地址:https://www.jb51.cc/ubuntu/347378.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐