登录
首页 >  Golang >  Go问答

我可以使用 Go dlv exec ./go-server 反编译所有 go 代码吗?

来源:stackoverflow

时间:2024-02-23 23:38:03 392浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《我可以使用 Go dlv exec ./go-server 反编译所有 go 代码吗?》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

假设一个 go-server 文件是由 windows 系统和 linux 操作系统编译的,我可以使用 go dlv exec ./go-server 反编译所有 go 代码吗?

当我尝试打破某些点时,我收到以下消息,但它没有打印代码,除了 ida 之外还有什么方法可以反编译它,因为它太昂贵了。

(dlv) b main.main
Breakpoint 1 set at 0x845ecf for main.main() E:/Code/GoCode/go-server/main.go:10
(dlv) c
> main.main() D:/Go/main.go:10 (hits goroutine(1):1 total:1) (PC: 0x845ecf)
Warning: debugging optimized function
(dlv) n
> main.main() D:/Go/main.go:11 (PC: 0x845ee6)
Warning: debugging optimized function
(dlv) n
Config file: ./dev.json Load success!
> main.main() D:/Go/main.go:12 (PC: 0x845f00)
Warning: debugging optimized function

正确答案


不,dlv 没有反编译器,尽管与 C 或 C++ 相比,Go 在运行时有更多关于程序的元数据,但很难恢复编译过程,你最终不太可能得到与原始程序类似的东西来自反编译器的源代码。

我认为您所质疑的是,如果您可以使用来自另一台主机的源代码列表进行调试,请注意,通常调试器不会反编译程序(除非它们是为了在没有源代码的情况下进行调试)代码,如 IDA),而不是编译器创建元数据,其中包含对原始源代码文件及其行的每条指令的引用,然后调试器可以加载此源代码文件并构建其功能,例如从那里逐步进行源代码级别,您需要的是将所有源代码复制到 Linux 计算机文件系统上的某个位置,并配置 dlv 以了解如何找到此源代码:

config 替代路径 E:/Code/GoCode/go-server/ /home/user/somewhere/

请记住,您需要保持可执行文件与编译它的原始源代码同步,否则调试器可能会显示错误的行偏移

本篇关于《我可以使用 Go dlv exec ./go-server 反编译所有 go 代码吗?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>