Golang 的 cgo 现在是否支持使用 .gopclntab 输出?

逆向工程 编译器 部分
2021-06-11 18:43:33

我读过这个页面,其中作者 Chris Siebenmann 指出使用创建的二进制文件cgo不会有gopclntabgosymtab部分。但是,我在 上看到go version go1.13.15 linux/amd64,我已经构建了一个 Go 程序,该程序使用 链接基本的 c 代码cgo,并且我已经确认在生成的二进制文件radare2中实际上有一个.gopclntab部分。

自从撰写本文(以及参考的构建更好的 Go 链接器文章)以来,是否发生了变化或者是否有其他一些情况cgo可能会剥离这些部分?我问是因为我确实看到了其他cgo缺少这些部分的输出二进制文件,但是我无法使用我的cgo工具链版本来重现它

除了知道这个事实之外,这个信息与逆向工程 go 二进制文件有关,因为它.gopclntab 可以用于提取符号信息过去,由于cgo编译没有此表,这使得这样做变得更加困难。

1个回答

我认为 gopclntab 部分应该始终存在于任何 Go 二进制文件中。没有它 panic() 无法打印堆栈跟踪。我怀疑您引用的作者对此有误解。

话虽如此,AFAIK gopclntab 将不包含链接的 C 库的符号或展开信息。此信息仅在 DWARF 中找到。