c - SIGSEGV 段错误,不同的消息

标签 c gcc gdb buffer-overflow segmentation-fault

我正在尝试运行该程序来测试缓冲区溢出,但是当程序崩溃时,它向我显示 SIGSEGV 错误,如下所示:

Program received signal SIGSEGV, Segmentation fault. 0x00000000004006c0 in main (argc=2, argv=0x7fffffffde78)

但是我正在学习的教程收到以下消息:

Program received signal SIGSEGV, Segmentation fault. 0x41414141 in ?? ()

因此我无法获得缓冲区溢出的确切内存位置。

我在编译我的程序时已经使用了-fno-stack-protector。因为在此之前我遇到了 SIGABRT 错误。

有没有人有任何线索,以便我可以与教程同步。

最佳答案

我能够找出两者的区别。

实际上,我在虚拟机上的 Ubuntu 64 位上尝试了相同的代码。 但是后来我尝试在虚拟机上安装 Ubuntu 32 位,所以现在我也收到了与教程中相同的消息。

我在 64 位和 32 位操作系统中注意到的另一个区别是,在使用 32 位操作系统时,我们可以使用 $esp 检查堆栈,但在 64 位计算机中,我们必须使用 $rsp

关于c - SIGSEGV 段错误,不同的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33970470/

相关文章:

我可以将 IO 端口作为参数传递给函数吗?

c - 返回字符串中的第 i 个单词

c - 带有 IDAT 的调色板基础 PNG,其 BTYPE=00 用于无压缩,现在带有 Adler32 代码

c - 存储到我的文件中的结构没有被覆盖(C)

c++ - 识别自动生成的成员函数

linux - 使用远程 gdbserver 启动 ddd

c++ - 简单情况下的 Gcovr 分支覆盖率

debugging - 如何让gdb一起打印两个源代码对应的反汇编代码?

c - gdb 在修改参数时打印错误的值

c - 了解 gdb 中的这种不稳定行为