Linux 编译链接期间生成构建id

Linux 编译链接期间生成构建id,linux,elf,Linux,Elf,现在有人知道如何生成生成id了吗?我在网上到处找,但找不到解释。我发现了这个,但这并没有告诉我它是如何生成的。我也发现了这个,但我不确定这是不是该看的地方。那么,有人知道构建id是如何生成的吗 它是通过ELF文件的一个部分、多个部分还是随机生成的 它是通过ELF文件的一个部分、多个部分还是随机生成的 Build ID的目标是使其易于将调试信息与它所属的ELF映像(ET_EXEC或ET_DYN)关联 正如罗兰所解释的,您可以使用随机UUID,但这有一个缺点,即不能进行完全相同的重建。您也可以在整个

现在有人知道如何生成生成id了吗?我在网上到处找,但找不到解释。我发现了这个,但这并没有告诉我它是如何生成的。我也发现了这个,但我不确定这是不是该看的地方。那么,有人知道构建id是如何生成的吗

它是通过ELF文件的一个部分、多个部分还是随机生成的

它是通过ELF文件的一个部分、多个部分还是随机生成的

Build ID的目标是使其易于将调试信息与它所属的ELF映像(
ET_EXEC
ET_DYN
)关联

正如罗兰所解释的,您可以使用随机UUID,但这有一个缺点,即不能进行完全相同的重建。您也可以在整个ELF图像上使用
md5
sha1
校验和,但这有可能导致人们将其误用为实际校验和

因此,该实现在映像的重要部分上使用校验和,这样就不太可能在不同映像上发生哈希冲突(相同的构建ID)

确切地说,哪些部分是重要的留给链接器实现者,并作为实现细节留给他们。如果您想确切地知道这些部分是什么,那么您必须阅读相应的实现文件,以及

您还可以替换自己的UUID(如果您不关心位相同的重建)--build id标志接受用户提供的位字符串,并很乐意将其放入ELF映像中

另外,您在
perf
中找到的build-id.c与生成build-id无关
perf
记录它观察到的图像的构建id,因此以后的分析可以获取正确的ELF图像来执行符号化