我编写了一个简单的程序,它所做的只是调用一个名为meller1的函数,它调用meller2,依此类推,直到一些函数调用free并崩溃。当使用coredump文件在此程序上运行gdb backtrace时,我收到:
我的问题是,gdb bt如何知道free /是从/lib/libc.so.6获取的? 考虑到Coredump文件和可执行文件本身,我是否可以自己动手操作? 感谢。
答案 0 :(得分:1)
我的问题是,gdb bt如何知道免费是从/lib/libc.so.6获取的?
没有。所有GDB都知道(在开始时)崩溃发生在地址0xf7e3bf9c
。然后GDB必须努力将该地址映射到有意义的地方。
GDB的方式是通过查看当前ELF图像的加载器映射来找到正确的图像 - “覆盖”给定地址的图像(这给它/lib/libc.so.6
),然后读取符号表ELF图像找出覆盖给定地址的函数(最终生成free
)。
在给出Coredump文件和可执行文件本身的情况下,我是否可以自己动手操作?
当然:GDB只是一个程序,您当然可以编写另一个执行所有相同步骤的程序。编写这样的程序只需要几年的时间。