【发布时间】:2020-05-04 03:28:07
【问题描述】:
我有一个包含 DWARF 信息的共享对象文件。我想找到一个函数的偏移量。我的堆栈跟踪格式为mangledFuncName + 0x123。我想找到对应框架的代码行。理想情况下,我想在 .so 文件的所有偏移量与偏移量/偏移范围的文件名/行号之间建立某种映射。这可能与gdb有关吗?
【问题讨论】:
我有一个包含 DWARF 信息的共享对象文件。我想找到一个函数的偏移量。我的堆栈跟踪格式为mangledFuncName + 0x123。我想找到对应框架的代码行。理想情况下,我想在 .so 文件的所有偏移量与偏移量/偏移范围的文件名/行号之间建立某种映射。这可能与gdb有关吗?
【问题讨论】:
我想找到一个函数的偏移量。
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。我想找到对应框架的代码行
最简单的解决方案是计算实际地址(将0x123添加到上面提取的mangledFuncName的地址),并使用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)
【讨论】: