亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何確定 ELF 文件是否為 Go ELF 文件?

如何確定 ELF 文件是否為 Go ELF 文件?

Go
哈士奇WWW 2022-10-10 19:04:58
我需要確定給定的 ELF 文件是否來自 Go。根據此鏈接:$ readelf -a traefik.stripped | grep "\.note\.go\.buildid"這是否以任何方式不如 Go 的原生方式:$ go tool buildid traefik.strippedoPIWoPjqt1P3rttpA3ee/ByNXPhvgS37nIoJY-HYB/8b25JYXrgktA-FYgU5MU/0Posfq41xZW9BEPEG4Ub兩種方法都可以保證在剝離的二進制文件上工作嗎?
查看完整描述

3 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

我需要確定給定的 ELF 文件是否來自 Go

這是一般情況下不可能做到的。什么是和不是 Go 二進制文件沒有很好的定義,一個充分優化的 Go 二進制文件最終可能只包含幾條指令。例如x86_64,您可能會得到一條HLT指令。

為什么 strip 本身不會刪除此部分?

這部分(實際上是每個部分)對于執行不是必需的——您可以刪除所有部分,二進制文件仍然可以工作。

本節用于幫助開發人員識別特定構建。 默認情況下strip不會刪除它,因為這會破壞本節的目的,但它當然可以這樣做。

一個無辜的 go 開發人員可以構建一個 golang ELF 并意外刪除這個(冗余??)部分

當然。開發人員可以運行一個損壞的版本strip,或者他可以使用別名strip,strip --strip-all或者他可以使用其他一些 ELF 后處理工具,或者他可以使用 UPX,或者......


查看完整回答
反對 回復 2022-10-10
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

至于使用標準的 go 工具,該部分應該在那里,但是有一種方法可以隱藏二進制文件的 go 特性而沒有任何惡意。使用upx來減小二進制文件的大小將完全隱藏二進制文件的 go 特性,因為 upx 可以處理任何語言的二進制文件。



查看完整回答
反對 回復 2022-10-10
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

提到的部分是一個NOTE部分:


$ readelf -a traefik.stripped | grep "\.note\.go\.buildid" | sed -n "1,1p"

  [11] .note.go.buildid  NOTE             0000000000400f9c  00000f9c

顯然NOTE,有時可能會刪除部分以減小尺寸(相關):


objcopy --remove-section=.note.go.buildid traefik.stripped traefik.super.stripped

刪除提到的部分似乎不會損害整個二進制文件的完整性


查看完整回答
反對 回復 2022-10-10
  • 3 回答
  • 0 關注
  • 244 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號