0

如何使用构建 ID 标记 ELF 库?我下载了一个预编译库,其中包含一个 sha1 总和:

user@localhost ~/tmp $ file foo.so.0
foo.so.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x7e3374eb34cafb69d3dca8b126f4aa33d44bb465, stripped

user@localhost ~/tmp $ ldd foo.so.0
linux-vdso.so.1 (0x00007fff955b1000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f436d3c9000)
libc.so.6 => /lib64/libc.so.6 (0x00007f436d022000)
/lib64/ld-linux-x86-64.so.2 (0x0000003000000000)
4

1 回答 1

0

来自http://fedoraproject.org/wiki/RolandMcGrath/BuildID

ld:新选项 --build-id

这为 ld 添加了一个选项,用于合成具有 SHT_NOTE 类型和标志 SHF_ALLOC(只读数据)的 .note.gnu.build-id 部分,其中包含 ELF 注释标头和构建 ID 位。然后它进入链接,就好像它是第一个目标文件的一部分一样(因此它可以由链接器脚本放置或合并)。构建 ID 位被确定为 ld 在写出链接文件之前所做的最后一件事。您可以给 --build-id=style 选择 md5、uuid(128 个随机位)或 0xabcdef(您选择的十六进制字节)。只是 --build-id 默认为 md5,它根据文件中的所有 ELF 标头位和部分内容计算 128 位 MD5 签名——即,在 ELF 文件有意义的内容集中唯一的 ID 并且相同当输出文件本来是相同的。

Linux binutils-2.17.50.0.17 版本在 f8test1 中包含此内容。

于 2013-04-21T18:37:25.120 回答