gdb backtrace如何知道每个函数取自哪个库?

时间:2015-12-08 13:30:10

标签: gdb coredump ldd readelf debug-backtrace

我编写了一个简单的程序,它所做的只是调用一个名为meller1的函数,它调用meller2,依此类推,直到一些函数调用free并崩溃。当使用coredump文件在此程序上运行gdb backtrace时,我收到:

gdb bt

我的问题是,gdb bt如何知道free /是从/lib/libc.so.6获取的? 考虑到Coredump文件和可执行文件本身,我是否可以自己动手操作? 感谢。

1 个答案:

答案 0 :(得分:1)

  

我的问题是,gdb bt如何知道免费是从/lib/libc.so.6获取的?

没有。所有GDB都知道(在开始时)崩溃发生在地址0xf7e3bf9c。然后GDB必须努力将该地址映射到有意义的地方。

GDB的方式是通过查看当前ELF图像的加载器映射来找到正确的图像 - “覆盖”给定地址的图像(这给它/lib/libc.so.6),然后读取符号表ELF图像找出覆盖给定地址的函数(最终生成free)。

  

在给出Coredump文件和可执行文件本身的情况下,我是否可以自己动手操作?

当然:GDB只是一个程序,您当然可以编写另一个执行所有相同步骤的程序。编写这样的程序只需要几年的时间。