3 回答

TA貢獻1793條經驗 獲得超6個贊
我需要確定給定的 ELF 文件是否來自 Go
這是一般情況下不可能做到的。什么是和不是 Go 二進制文件沒有很好的定義,一個充分優化的 Go 二進制文件最終可能只包含幾條指令。例如x86_64
,您可能會得到一條HLT
指令。
為什么 strip 本身不會刪除此部分?
這部分(實際上是每個部分)對于執行不是必需的——您可以刪除所有部分,二進制文件仍然可以工作。
本節僅用于幫助開發人員識別特定構建。 默認情況下strip
不會刪除它,因為這會破壞本節的目的,但它當然可以這樣做。
一個無辜的 go 開發人員可以構建一個 golang ELF 并意外刪除這個(冗余??)部分
當然。開發人員可以運行一個損壞的版本strip
,或者他可以使用別名strip
,strip --strip-all
或者他可以使用其他一些 ELF 后處理工具,或者他可以使用 UPX,或者......

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
刪除提到的部分似乎不會損害整個二進制文件的完整性
- 3 回答
- 0 關注
- 244 瀏覽
添加回答
舉報