gdb - 如何使用 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)
推荐阅读
- rest - 是否建议使用 Swagger 编辑器生成的服务器或客户端代码?
- xslt - 基于从现有节点搜索创建新节点
- flutter - DropdownButtonFormField 的选定值仅在我重新加载整个应用程序时出现
- c - 获取没有最后一个成员的结构的大小
- python - 无法将 datetime.date 与 bool 进行比较
- elasticsearch - Logstash Json 解析
- javascript - 路由更改时反应本机重新渲染
- haskell - 获取元组的最高值?
- python - **SQLAlchemy**:获取另一列不同的一列的计数
- scikit-learn - Sagemaker - 随机森林 - 特征归一化?预处理?