如何提取Go目标归档中的目标文件或直接生成非归档格式目标文件?
解决Go目标文件分析的问题
1. 直接编译为原生ELF目标文件
Go的compile工具默认生成包含包元数据的归档格式文件,若要直接输出可被readelf、objdump识别的原生ELF目标文件,添加-c参数即可:
go tool compile -c -o test.o test.go
此时生成的test.o就是对应平台的标准ELF格式,可直接用系统工具分析。
2. 提取Go归档内容的其他方式
除了go tool pack x提取所有归档成员外,还可以:
- 查看归档内的成员列表:
go tool pack p test.o - 仅提取指定成员(比如只提取
_go_.o):go tool pack e test.o _go_.o
需要注意的是,默认归档中的_go_.o是Go内部的中间目标格式,并非原生ELF,仍只能用go tool objdump这类Go专属工具处理,若要兼容系统工具,优先使用上述-c参数的编译方式。
内容的提问来源于stack exchange,提问作者Frixos Kallenos
相关产品推荐
相关产品推荐

