addr2line的反向

问题描述:

给定一个目标文件和地址addr2line工具可以将它与源代码中的文件和行号关联起来。addr2line的反向

我想要相反。给定一个行号和一个目标文件,我想获得与源代码中给定行对应的指令地址列表。

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

UPD。

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

我有一组文件行:

src/a.c:14 
src/a.c:28 
src/b.c:44 

我通过这个列表的工具:

cat lines | line2addr -e lib.so 

,并上报我指令地址为这些行:

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 
... 
+1

'gdb'调试器可以通过可执行文件(而不是单独的对象文件)来完成。当然,你需要编译调试信息。 –

+0

http://gcc.godbolt.org/为将行映射到asm的小函数做了很好的工作。它甚至有颜色编码。例如http://goo.gl/aLPTts –

+0

@BasileStarynkevitch我可以编译调试信息。但我并没有完全理解如何获取gdb中的地址。我发现我可以设置一个断点,但它只显示一个地址,尽管同一行可能有多条指令。 – mcsim

仔细阅读documentation of GDB。如果你的可执行文件已建成调试信息(与-g编译所有的代码),你可以使用 stack related命令,machine code related命令等

我不知道理解你的愿望,但我想这disx命令可能会有帮助

此外,最近的GDB在Python和Guile中都是脚本化的。

+0

用一个例子更新了这个问题 – mcsim