如何检查Go包文件(.a文件)?

huangapple go评论86阅读模式
英文:

How to inspect Go package files (.a files)?

问题

如何检查Go包/对象文件(.a.o)的内容?

我找到的唯一方法是使用go tool objdump显示完整的反汇编代码。

但是如何显示文件结构,例如导入和导出的符号、代码、数据和其他部分,以及其他元数据等?

英文:

How to inspect the content of Go package/object files (.a, .o)

The only thing I found is showing the full disassembly with go tool objdump.

But how to show the file structure, like imported and exported symbols, code, data and other sections, other metadata etc.?

答案1

得分: 10

编译的Go包存储在Unix ar归档文件中,因此您可以使用argo tool pack x pkg.a提取其中的文件。

包文件包含编译的代码(_go_.o),链接器用于构建二进制文件,以及导出数据(__.PKGDEF),编译器在构建依赖包时使用。如果包含汇编文件或cgo代码,则可能还有其他.o文件。

您可以使用golang.org/x/tools/go/gcexportdata将导出数据读入可以被go/types理解的格式中。

听起来您已经找到了用于反汇编的go tool objdump。您还可能发现go tool nm对于列出符号很有用。

英文:

Compiled Go packages are stored in Unix ar archive files, so you can extract the files within them using ar or go tool pack x pkg.a.

Package files contain compiled code (_go_.o), used by the linker to build binaries, and export data (__.PKGDEF), used by the compiler when building dependent packages. If the package contained assembly files or cgo code, there may be additional .o files, too.

You can use golang.org/x/tools/go/gcexportdata to read export data into a format that can be understood by go/types.

It sounds like you've already found go tool objdump for disassembly. You might also find go tool nm useful for listing symbols.

huangapple
  • 本文由 发表于 2021年6月25日 23:13:18
  • 转载请务必保留本文链接:https://go.coder-hub.com/68133289.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定