2013-03-20 71 views
0

如何使用生成ID标记ELF库? 我下载了中有一个SHA1和预编译库:使用校验和标记共享库

[email protected] ~/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 

[email protected] ~/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) 

回答

0

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

LD:新的选项--build-ID

这增加了一个选项, ld合成一个类型为SHT_NOTE的.note.gnu.build-id部分,并标记SHF_ALLOC(只读数据),该部分包含一个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中包含了这一点。

+0

请在实际答案中包含您链接的页面的相关部分。如果页面被移动,你的答案将变得毫无用处。 – ChrisF 2013-04-21 19:15:06

+0

复制了ld的--build-id标志的解释。 – r0bertz 2013-04-21 19:34:23

+0

而不是仅仅复制文本,最好解释它。 – ChrisF 2013-04-21 19:42:06