memcpy backtrace没有可用的符号

jsj*_*jsj 5 gdb libc

我不知道为什么我看不到这种回溯.加载我自己的二进制文件中的符号,然后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)
Run Code Online (Sandbox Code Playgroud)

jcm*_*jcm 1

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

检查此类损坏的一种方法是使用watchgdb 命令:

  1. 最重要的部分是界定应该损坏的调用。在你的情况下应该是对 memcpy 或接近它的调用。
  2. 一旦你有一个可疑的函数,就在它上面添加一个断点。
  3. 运行直到到达断点。
  4. 通过以下方式将观察点设置到调用函数的地址中:watch 0xXXXXXX
  5. 运行直到到达观察点。

如果返回地址被覆盖,数据库应该在损坏的调用上停止。