【问题标题】:build-id generation during compilation-linking在编译链接期间生成构建 ID
【发布时间】:2020-08-22 01:11:07
【问题描述】:

现在有人知道如何生成 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 文件的一部分、多个部分还是随机生成的?

【问题讨论】:

    标签: linux elf


    【解决方案1】:

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

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

    正如 Roland 解释的那样,您可以为其使用随机 UUID,但这样做的缺点是无法进行位相同的重建。您也可以在整个 ELF 映像上使用 md5sha1 校验和,但这存在人们将其误用作实际校验和的风险。

    因此,该实现对图像的重要部分使用校验和,因此不同图像上的哈希冲突(相同的 build-id)极不可能发生。

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多