SIGSEGV分段错误,不同消息

时间:2015-11-28 10:51:21

标签: c gcc gdb buffer-overflow sigsegv

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

  

编程接收信号SIGSEGV,分段故障。   主要的0x00000000004006c0(argc = 2,argv = 0x7fffffffde78)

但我正在遵循的教程是收到以下信息:

  

编程接收信号SIGSEGV,分段故障。 0x41414141在?   ()

由于这个原因,我无法获得缓冲区溢出的确切内存位置。

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

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

2 个答案:

答案 0 :(得分:2)

我能够找出两者的区别。

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

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

答案 1 :(得分:0)

SIGSEGV是当您的程序试图访问不应该执行的内存位置时引发的信号。两种典型情况是:

  • 推荐未初始化的指针。
  • 访问数组越野。

但请注意,即使在这两种情况下,也无法保证SIGSEGV 始终发生。因此,即使使用相同的代码,也不要指望SIGSEGV消息始终相同。