使用Go反编译已编译的程序

时间:2014-07-30 10:06:13

标签: compiler-construction go decompiling

我用Go构建了一个简单的可执行程序。

我已将代码编译成静态二进制程序。

我想反编译输出二进制文件并获取Go源代码。

这可能与否?

2 个答案:

答案 0 :(得分:39)

没有工具可以做到这一点,并且当Go程序被编译成机器代码时,它们不包含足够的信息来将它们转换回Go代码。但是仍然可以使用标准的拆卸技术。

答案 1 :(得分:23)

目前没有已知的工具可以反编译为Go源。

Go是一种本地语言编译器,与Java和类似语言不同,它依赖于类加载器,使用链接器生成其可执行文件。 因此,重新构建调用树就像在C语言和类似语言中一样,难度更大。

符号的调试信息通常会从Go可执行文件中删除。

即使在Golang代码的符号调试方面也很少。

例如,GDB是AFAIK,其当前状态与Go架构不一致,并且在Golang符号调试方面实际上不起作用。由于这个原因,Go GDB已经从IntelliJ ide中删除了。

有些用户试图重新获得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