首页 > 解决方案 > 如何使用 gdb 查找函数的偏移量?

问题描述

我有一个包含 DWARF 信息的共享对象文件。我想找到一个函数的偏移量。我的堆栈跟踪格式为mangledFuncName + 0x123. 我想找到对应框架的代码行。理想情况下,我想在 .so 文件的所有偏移量与偏移量/偏移范围的文件名/行号之间建立某种映射。这可能与gdb有关吗?

标签: gdbdwarf

解决方案


我想找到一个函数的偏移量。

readelf -Ws foo.so | egrep ' function\W'

例如:

readelf -Ws /lib/x86_64-linux-gnu/libc.so.6 | egrep ' open\W'
  1782: 00000000000eb430   294 FUNC    WEAK   DEFAULT   14 open@@GLIBC_2.2.5

open值为0xeb430

我的堆栈跟踪格式为 mangledFuncName + 0x123。我想找到对应框架的代码行

最简单的解决方案是计算实际地址(添加0x123mangledFuncName上面提取的地址),并使用addr2line -fe foo.so $addr

例如,映射open+0x123到源文件/行会产生:

addr2line -fe /lib/x86_64-linux-gnu/libc.so.6 0xeb483
__libc_open64
/build/glibc-oCLvUT/glibc-2.29/io/../sysdeps/unix/sysv/linux/open64.c:48 (discriminator 1)

推荐阅读