我使用 Go
编写了一个简单的可执行程序。
我已将代码编译成静态二进制程序。
我想反编译输出的二进制文件并获取 Go 源代码。
这是否可能?
我使用 Go
编写了一个简单的可执行程序。
我已将代码编译成静态二进制程序。
我想反编译输出的二进制文件并获取 Go 源代码。
这是否可能?
目前没有相应的工具来实现这一点,因为Go程序被编译成机器码后,它们不包含足够的信息以将其翻译回Go代码。但标准的反汇编技术仍然是可行的。
目前没有已知的工具可以将程序反编译成Go源代码。
与Java等语言不同,Go是一种本地语言编译器,使用链接器生成其可执行文件,而不是依赖于类装载器。 因此,仅仅重构调用树就像C和类似语言一样更难。
调试信息,例如符号通常从Go可执行文件中剥离。
几乎没有关于Golang代码的符号调试方面的信息。
例如,据我所知,GDB在其当前状态下与Go架构不对齐,实际上在符号调试方面在Golang上几乎无法正常工作。正因为这个原因,在IntelliJ ide中取消了对Go GDB的支持。
有些用户正在进行实验性的努力,试图通过一些特殊非标准规定编译Go源代码以支持调试功能。例如: http://blog.securitymouse.com/2014/10/golang-debugging-turning-pennies-into-gs.html 其他针对Go的符号调试器也需要插入非标准代码以支持调试器,例如Hopwatch
因此,如果您需要反向工程一个Go程序,最好使用传统的低级别反向工程工具,例如IDA PRO。 这是绝对可能的,但最多只能得到类似C或ASM的伪代码,而不是Go源代码。
语言的某些特性在其他语言中不存在,例如通道,这需要一些学习和非平凡的方法。例如:http://jolmos.blogspot.nl/2014/09/inbincible-writeup-golang-binary.html