反向addr2line

时间:2015-11-27 09:37:30

标签: assembly dwarf 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
...

2 个答案:

答案 0 :(得分:2)

以实用方式执行此操作的方法是使用以下GDB cmd-line:

awk -F'|'

GDB接受使用调试信息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 7.6及更高版本。早期版本在加载目标文件时在Windows上崩溃。

多次应用(-g)开关可以翻译多行:

-ex

答案 1 :(得分:0)

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

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

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