首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >addr2line的反向

addr2line的反向
EN

Stack Overflow用户
提问于 2015-11-27 09:37:30
回答 2查看 1.4K关注 0票数 5

给定一个对象文件和地址,addr2line工具可以将其与源代码中的文件和行号相关联。

我想要相反的。给定一个行号和一个对象文件,我想得到一个指令地址列表,这些地址对应于源代码中的给定行。

我知道我可以使用objdump -DS并查找一行,但这很不方便,并且需要人工过滤地址。如果我给它一个行列表,你知道有什么工具可以做我想做的事吗?

UPD。

我举了一个我想要的例子。

我有一组文件行:

代码语言:javascript
复制
src/a.c:14
src/a.c:28
src/b.c:44

我将此列表传递给一个工具:

代码语言:javascript
复制
cat lines | line2addr -e lib.so

它向我报告了这些行的指令地址:

代码语言:javascript
复制
0x442: src/a.c:14
0x444: src/a.c:14
0x44a: src/a.c:14
0x584: src/a.c:28
0x588: src/a.c:28
...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-17 14:46:54

以实用程序的方式进行此操作的方法是使用以下GDB cmd行:

代码语言:javascript
复制
gdb ../main.o -ex "info line main.c:39" --batch 
Line 39 of "main.c" starts at address 0x36 <main+54> and ends at 0x5e <main+94>.

GDB接受使用调试信息(-g)编译的对象或可执行文件。使用GDB 7.6及更高版本。加载对象文件时,早期版本在Windows上崩溃。

通过多次应用-ex交换机可以转换多行:

代码语言:javascript
复制
gdb ../main.o -ex "info line main.c:39" -ex "info line main.c:41" --batch
Line 39 of "main.c" starts at address 0x36 <main+54> and ends at 0x5e <main+94>.
Line 41 of "main.c" starts at address 0x5e <main+94> and ends at 0x70 <main+112>.
票数 6
EN

Stack Overflow用户

发布于 2015-11-27 10:14:16

仔细阅读documentation of 。如果您的可执行文件是使用调试信息构建的(所有使用-g编译的代码),则可以使用 related命令、 related命令等。

我不确定是否理解您的愿望,但我想disx命令可能会有所帮助

此外,最近的GDB在Python和Guile中是可编写脚本的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33954368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档