我不知道为什么我看不到这个回溯。加载了我自己的二进制文件中的符号,并安装了libc6-dbg软件包。我需要告诉gdb在哪里可以找到libc符号吗?

Program received signal SIGSEGV, Segmentation fault.
__memcpy_ia32 () at ../sysdeps/i386/i686/multiarch/../memcpy.S:74
74  ../sysdeps/i386/i686/multiarch/../memcpy.S: No such file or directory.
(gdb) bt full
#0  __memcpy_ia32 () at ../sysdeps/i386/i686/multiarch/../memcpy.S:74
No locals.
#1  0x00000000 in ?? ()
No symbol table info available.
(gdb)

最佳答案

从回溯来看,可能是堆栈损坏覆盖了您的返回地址(主要是因为只有两个调用,并且没有有关调用memcpy的代码的信息)。您是否可能在堆栈中的某个地址上使用memcpy

检查这种损坏的一种方法是使用watch gdb命令:

  • 最重要的部分是分隔应该损坏的调用。您的情况应该是调用memcpy或接近它。
  • 一旦有了可疑函数,就可以在其上添加一个断点。
  • 运行直到到达断点。
  • 通过以下方法在调用函数的地址中设置观察点:watch 0xXXXXXX
  • 运行,直到达到观察点。

  • 如果返回地址被覆盖,则db应该在破坏调用时停止。

    关于gdb - memcpy backtrace没有可用的符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20560906/

    10-13 06:03