编译链接期间生成 build-id
build-id generation during compilation-linking
现在有人知道build-id是如何生成的吗?我一直在网上到处寻找,但找不到解释。我找到了这个,https://fedoraproject.org/wiki/RolandMcGrath/BuildID, but that doesn't tell me how it is generated. I also ound this, https://elixir.bootlin.com/linux/v5.8.3/source/tools/perf/util/build-id.c,但我不确定这个地方是否合适。那么,有人知道build-id是怎么生成的吗?
它是在 ELF 文件的一部分、多个部分还是随机生成的?
Is it generated over a section of an ELF file, multiple sections or randomly?
Build-ID 的目标是使其易于将调试信息与其所属的 ELF 映像(ET_EXEC
或 ET_DYN
)相关联。
正如 Roland 所解释的那样,您 可以 为它使用一个随机的 UUID,但这样做的缺点是会妨碍 bit-identical 重建。您 可以 也可以对整个 ELF 图像使用 md5
或 sha1
校验和,但这存在人们将其误用作实际校验和的风险。
因此该实现对图像的 重要 部分使用校验和,因此不同图像上的哈希冲突(相同 build-ids)极不可能。
具体哪些部分是重要的留给链接器实现者,并留作实现细节。如果你想确切地知道这些部分是什么,你必须阅读Gold, BFD ld and LLD的相应实现文件。
你也可以替换你自己的 UUID(如果你不关心bit-identical重建)——--build-id
标志接受user-provided 位串,我们会很乐意将它放入您的 ELF 图像中。
P.S。您在 perf
中找到的 build-id.c 与 build-ids 的 代 无关。 perf
记录 build-id张观察到的图片,方便后期分析抓取正确的ELF图片进行符号化。
现在有人知道build-id是如何生成的吗?我一直在网上到处寻找,但找不到解释。我找到了这个,https://fedoraproject.org/wiki/RolandMcGrath/BuildID, but that doesn't tell me how it is generated. I also ound this, https://elixir.bootlin.com/linux/v5.8.3/source/tools/perf/util/build-id.c,但我不确定这个地方是否合适。那么,有人知道build-id是怎么生成的吗?
它是在 ELF 文件的一部分、多个部分还是随机生成的?
Is it generated over a section of an ELF file, multiple sections or randomly?
Build-ID 的目标是使其易于将调试信息与其所属的 ELF 映像(ET_EXEC
或 ET_DYN
)相关联。
正如 Roland 所解释的那样,您 可以 为它使用一个随机的 UUID,但这样做的缺点是会妨碍 bit-identical 重建。您 可以 也可以对整个 ELF 图像使用 md5
或 sha1
校验和,但这存在人们将其误用作实际校验和的风险。
因此该实现对图像的 重要 部分使用校验和,因此不同图像上的哈希冲突(相同 build-ids)极不可能。
具体哪些部分是重要的留给链接器实现者,并留作实现细节。如果你想确切地知道这些部分是什么,你必须阅读Gold, BFD ld and LLD的相应实现文件。
你也可以替换你自己的 UUID(如果你不关心bit-identical重建)——--build-id
标志接受user-provided 位串,我们会很乐意将它放入您的 ELF 图像中。
P.S。您在 perf
中找到的 build-id.c 与 build-ids 的 代 无关。 perf
记录 build-id张观察到的图片,方便后期分析抓取正确的ELF图片进行符号化。