如何查看ELF文件的GNU debuglink值?

时间:2017-09-13 16:05:54

标签: binutils

所以我可以添加一个指向调试符号文件的链接,就像这个objcopy --add-gnu-debuglink=$name.dbg $name一样,但我怎么能在以后再次检索该值?

我使用readelf -a进行了检查,并在没有任何运气的情况下为\.dbg进行了搜索。同样,我使用objdump -sj .gnu_debuglink.gnu_debuglink是部分)进行了检查,并且可以在那里看到值:

$ objdump -sj .gnu_debuglink helloworld|grep \.dbg
0000 68656c6c 6f776f72 6c642e64 62670000  helloworld.dbg..

但是,是否会有一个命令允许我再次提取检索确切的值(即上例中的helloworld.dbg)?那是文件名 only ...

我意识到我可以在这里使用一些shell foo,但似乎很奇怪,有一个选项可以设置这个值,但没有一个可以检索它。所以我可能只是错过了它。

2 个答案:

答案 0 :(得分:2)

这样的事情应该有效:

objcopy --output-target=binary --set-section-flags .gnu_debuglink=alloc \
  --only-section=.gnu_debuglink helloworld helloworld.dbg

--output-target=binary避免添加ELF标头。需要--set-section-flags .gnu_debuglink=alloc,因为objcopy默认情况下只会写入已分配的部分(使用binary仿真)。而--only-section=.gnu_debuglink最终确定了答案。 See this earlier answer.

请注意,生成的文件可能有一个尾随的NUL字节和四个字节的CRC,因此需要进行一些后处理以提取所有内容直到第一个NUL字节(可能使用head -z -n 1 helloworld.dbg | tr -d '\0'或类似的东西)。 / p>

答案 1 :(得分:1)

您可以直接使用LocC

readelf

我不知道第二个条目的含义(它似乎总是不同的)。要摆脱标题和偏移量,可以使用$ readelf --string-dump=.gnu_debuglink helloworld String dump of section '.gnu_debuglink': [ 0] helloworld [ 1b] 9

sed