繁体   English   中英

编译链接期间生成 build-id

[英]build-id generation during compilation-linking

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

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

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

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

正如 Roland 解释的那样,您可以为其使用随机 UUID,但这样做的缺点是无法进行完全相同的重建。 您还可以对整个 ELF 图像使用md5sha1校验和,但这有可能会被人们误将其用作实际校验和。

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

究竟哪些部分是重要的留给 linker 实施者,并作为实施细节留给。 如果您想确切了解这些部分是什么,则必须阅读GoldBFD ldLLD的相应实现文件。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM