【发布时间】:2015-11-28 10:51:20
【问题描述】:
我正在尝试运行程序来测试缓冲区溢出,但是当程序崩溃时,它会向我显示 SIGSEGV 错误,如下所示:
程序收到信号SIGSEGV,分段错误。 0x00000000004006c0 in main (argc=2, argv=0x7fffffffde78)
但我正在关注的教程收到以下消息:
程序收到信号SIGSEGV,分段错误。 0x41414141 在?? ()
因此,我无法获得缓冲区溢出的确切内存位置。
我在编译我的程序时已经使用了-fno-stack-protector。因为在此之前我遇到了 SIGABRT 错误。
有没有人有任何线索可以让我与教程同步。
【问题讨论】:
-
想想undefined行为的含义!
-
@Olaf 想想这个问题是关于实际发生了什么而不是根据 C 标准应该发生什么!
-
@immibis:不,这是关于可能会发生什么,并且期待undefined行为没有用以已定义的方式行事。鼻恶魔总是一种选择。
-
地址是虚拟的,不保证在不同的机器/操作系统版本等上完全相同。最糟糕的是,有一些机制可以反击此类攻击,例如:en.wikipedia.org/wiki/Address_space_layout_randomization... Don不要依赖价值观,至少要小心……
标签: c gcc gdb buffer-overflow segmentation-fault