Assembly 当尝试使用gdb查找segfault时,我得到了以下结果

Assembly 当尝试使用gdb查找segfault时,我得到了以下结果,assembly,x86,gdb,Assembly,X86,Gdb,我在汇编中编写了一个程序,它会在随机时间出现故障,我从gdb得到的就是这个。知道为什么吗?我不是在寻找关于我的代码的具体答案,而是gdb作为一个整体。为什么说??()我在网上到处找了找,似乎找不到其他类似的例子。它通常不会告诉我它在哪个函数中吗 Program received signal SIGSEGV, Segmentation fault. 0x53f63156 in ?? () 从那以后已经很久了,但我想: 程序接收信号SIGSEGV,分段故障。 您正在尝试访问为您保留的范围之外的内

我在汇编中编写了一个程序,它会在随机时间出现故障,我从gdb得到的就是这个。知道为什么吗?我不是在寻找关于我的代码的具体答案,而是gdb作为一个整体。为什么说??()我在网上到处找了找,似乎找不到其他类似的例子。它通常不会告诉我它在哪个函数中吗

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

从那以后已经很久了,但我想:

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

这:

0x53f63156英寸??()

可能试图说,您试图访问的非法内存地址是0x53f63156
“?”表示访问发生的例程没有名字,或者至少在符号表中找不到它。

很久没有了,但我想:

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

这:

0x53f63156英寸??()

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

程序接收信号SIGSEGV,分段故障。
0x53f63156英寸??()

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

常见原因:

  • 对已删除对象调用虚拟函数
  • 使用未初始化的函数指针
  • 覆盖堆栈上的返回地址
在前两个例子中,
(gdb)where
应该仍然能够告诉您是如何到达那里的

在最后一种情况下,您可能需要使用工具,例如,告诉您溢出发生在哪里(address sanitizer或Valgrind也是调试其他原因的首选工具)

另外,您的指针
0x53f63156
看起来可能是ASCII:“S.1V”(其中“.”是0xF6)。如果您的程序处理像“S.1V”这样的字符串,那么堆栈溢出很可能是一个原因

程序接收信号SIGSEGV,分段故障。
0x53f63156英寸??()

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

常见原因:

  • 对已删除对象调用虚拟函数
  • 使用未初始化的函数指针
  • 覆盖堆栈上的返回地址
在前两个例子中,
(gdb)where
应该仍然能够告诉您是如何到达那里的

在最后一种情况下,您可能需要使用工具,例如,告诉您溢出发生在哪里(address sanitizer或Valgrind也是调试其他原因的首选工具)


另外,您的指针
0x53f63156
看起来可能是ASCII:“S.1V”(其中“.”是0xF6)。如果您的程序处理像“S.1V”这样的字符串,那么堆栈溢出很可能是一个原因。

是否显示/i$pc帮助?它告诉我0x8048591:离开我是汇编新手,所以您是否可以帮助我理解这意味着什么?我知道这一定发生在我的最终功能中。+6代表什么?没有你的代码很难说。当然,您不会使用调试c时可能用到的符号,因为这里没有任何高级代码(您希望使用哪些函数名?)-您应该能够查看汇编代码,尽管
display/i$pc
help?它告诉我0x8048591:离开我是汇编新手,那么您是否可以帮助我理解这意味着什么?我知道这一定发生在我的最终功能中。+6代表什么?没有你的代码很难说。当然,您不会使用调试c时可能用到的符号,因为这里没有任何高级代码(您希望使用哪些函数名?),但您应该能够查看汇编代码