Cha*_*kka 26 compiler-construction decompiling go
我用它构建了一个简单的可执行程序Go
.
我已经将代码编译成静态二进制程序.
我想反编译输出二进制文件并获取Go源代码.
这可能吗?
fuz*_*fuz 44
没有工具可以做到这一点,并且当Go程序被编译成机器代码时,它们不包含足够的信息来将它们转换回Go代码.但是仍然可以使用标准的拆卸技术.
Mic*_*dda 25
目前没有已知的工具可以反编译为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
现在已经有了逆向工程的方法,但之后仍然需要付出很多努力。
参考:GoTools
这适用于 [Ghidra](https://github.com/NationalSecurityAgency/ghidra/releases),NSA 的逆向工程工具。
此 Python 脚本有助于某些反编译后任务的重命名。
注意:在尝试任何此操作之前,请参阅当地法律,确保您不会弄乱任何专有软件。