当尝试使用gdb来查找段错误时,我得到了这个

时间:2013-12-02 20:36:01

标签: assembly x86 gdb

我在程序集中编写了一个程序,并且它随机出现了段错误,而我从gdb得到的就是这个。知道为什么吗?我不是在寻找关于我的代码的具体答案,而是整个gdb。为什么这么说? ()我环顾网络,似乎无法在任何地方找到这个发布的另一个实例。它通常不会告诉我它在哪个功能吗?

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

2 个答案:

答案 0 :(得分:0)

这已经很久了,但我想:

  

编程接收信号SIGSEGV,分段故障。   您正在尝试访问为您保留的范围之外的内存。   (坏指针)

此:

  

0x53f63156在? ()

可能试图说,您尝试访问的非法内存地址是0x53f63156 和“??”意味着没有给出访问发生的例程的名称 - 或者至少在符号表中找不到它。

答案 1 :(得分:0)

  

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

通常这意味着您的程序跳转到无效地址。

常见原因:

  • 在已删除的对象上调用虚函数
  • 使用未初始化的函数指针
  • 覆盖堆栈上的返回地址

在前两个中,(gdb) where应该仍然可以告诉你你是如何到达那里的。

在上一篇文章中,您可能必须使用工具(例如address sanitizer)来告诉您溢出发生的位置(地址清理程序或Valgrind也是调试其他原因的首选工具)。 / p>

P.S。你的指针0x53f63156看起来像是ASCII:" S.1V" (其中'。'是0xF6)。如果您的程序处理类似' S.1V'等字符串,则堆栈溢出很可能是原因。