ELF 的 gnu_debuglink 部分给了我一个奇怪的名字
ELF's gnu_debuglink section gives me weird name
我用过 Ubuntu 20.04.3,当我 运行
readelf --string-dump=.gnu_debuglink /usr/bin/cp
我得到了奇怪的调试文件名,同时期待 cp.debug
String dump of section '.gnu_debuglink':
[ 0] 674b3a5e9ca27e34cf3517aa997ba91ce6e0a0.debug
[ 31] k`-
这是原图Ubuntu,没有任何修改。
这有什么原因吗?
I got weird debug filename while expecting something like cp.debug
这个名字没什么奇怪的。
有两种常用方案可将程序与该程序的调试信息相关联 -- 程序名称或其链接器 build-id。
您可以通过 readelf -n /usr/bin/cp
找到链接器 build-id。这是我系统上的输出:
Displaying notes found in: .note.gnu.build-id
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: 2f6b630344b1b72875f756dce05a40186d18c6d8
Displaying notes found in: .note.ABI-tag
Owner Data size Description
GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag) OS: Linux, ABI: 3.2.0
很可能,您的 cp
版本的链接器 build-id 是 674b3a5e9ca27e34cf3517aa997ba91ce6e0a0
。
使用链接器 build-id 对于可以出现在多个不同名称下的程序特别方便(如果仅使用程序名称,您将不得不创建调试信息的多个副本(或链接))。
此外,如果程序更新,其链接器 build-id 将会更改,因此调试器不可能加载“过时”的调试信息。
我用过 Ubuntu 20.04.3,当我 运行
readelf --string-dump=.gnu_debuglink /usr/bin/cp
我得到了奇怪的调试文件名,同时期待 cp.debug
String dump of section '.gnu_debuglink':
[ 0] 674b3a5e9ca27e34cf3517aa997ba91ce6e0a0.debug
[ 31] k`-
这是原图Ubuntu,没有任何修改。 这有什么原因吗?
I got weird debug filename while expecting something like cp.debug
这个名字没什么奇怪的。
有两种常用方案可将程序与该程序的调试信息相关联 -- 程序名称或其链接器 build-id。
您可以通过 readelf -n /usr/bin/cp
找到链接器 build-id。这是我系统上的输出:
Displaying notes found in: .note.gnu.build-id
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: 2f6b630344b1b72875f756dce05a40186d18c6d8
Displaying notes found in: .note.ABI-tag
Owner Data size Description
GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag) OS: Linux, ABI: 3.2.0
很可能,您的 cp
版本的链接器 build-id 是 674b3a5e9ca27e34cf3517aa997ba91ce6e0a0
。
使用链接器 build-id 对于可以出现在多个不同名称下的程序特别方便(如果仅使用程序名称,您将不得不创建调试信息的多个副本(或链接))。
此外,如果程序更新,其链接器 build-id 将会更改,因此调试器不可能加载“过时”的调试信息。