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 关注
- 184 浏览
添加回答
举报