如何解决编译链接期间生成build-id
有人现在如何生成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_EXEC
或ET_DYN
)相关联。
正如Roland解释的那样,您可以可以为其使用随机UUID,但是这样做有一个缺点,那就是不能完全按位重建。您可以在整个ELF图像上也使用md5
或sha1
校验和,但这可能会导致人们误将其用作实际校验和。
因此,该实现对图像的重要部分使用校验和,因此在不同图像上发生哈希冲突(相同的构建ID)的可能性很小。
确切重要的部分留给链接程序实现者,并留作实现细节。如果您想确切地了解这些部分是什么,则必须阅读Gold,BFD ld和LLD的相应实现文件。
您也可以替换您自己的 UUID(如果您不需要位相同的重建)– --build-id
标志接受用户提供的位字符串,并乐意放入进入您的ELF图片。
P.S。您在perf
中找到的build-id.c与 generation 的build-id无关。 perf
记录它观察到的图像的构建标识,因此以后的分析可以获取正确的ELF图像以执行符号化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。