簡體   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