编译链接期间生成生成id

  • 本文关键字:id 链接 编译 linux elf
  • 更新时间 :
  • 英文 :


现在有人知道构建id是如何生成的吗?我在网上到处找,但找不到解释。我发现了这个,https://fedoraproject.org/wiki/RolandMcGrath/BuildID,但这并不能告诉我它是如何生成的。我也听到了,https://elixir.bootlin.com/linux/v5.8.3/source/tools/perf/util/build-id.c,但我不确定这是否是一个合适的地方。那么,有人知道构建id是如何生成的吗?

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

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

Build ID的目标是使其易于将调试信息与其所属的ELF映像(ET_EXECET_DYN(关联起来。

正如Roland所解释的,可以使用随机UUID,但这有一个缺点,即排除了位相同的重建。也可以在整个ELF图像上使用md5sha1校验和,但这有可能被人们滥用为实际校验和。

因此,该实现在图像的重要部分使用校验和,因此不同图像上的哈希冲突(相同的构建ID(极不可能发生。

具体哪些部分是重要的留给链接器实现者,并作为实现细节留下。如果您想确切地了解这些部分是什么,您必须阅读Gold、BFD ld和LLD的相应实现文件。

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

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

最新更新