首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以使用Go dlv exec ./ go -server来反编译所有go代码吗?

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

Stack Overflow用户
提问于 2022-06-24 15:23:46
回答 1查看 46关注 0票数 1

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

当我试图破坏一些要点时,我得到了下面的消息,但是它没有打印代码,除了IDA之外,还有什么方法来解压缩它吗?

代码语言:javascript
运行
复制
(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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-24 23:23:48

不,dlv没有反编译程序,虽然与C或C++相比,Go在运行时拥有更多关于程序的元数据--很难恢复编译过程,但是您不太可能从反编译器获得源代码中的原始程序。

我想您要问的是,如果您可以使用来自另一个主机的源代码列表进行调试,请注意,调试器通常不会对程序进行反编译(除非它们是用来在没有源代码的情况下调试的,比如IDA),而是编译器创建元数据,将每条指令引用到原始源代码文件及其行中,然后调试器可以加载这个源代码文件并构建它的特性,就像源代码级别一样,您需要的是将所有源代码复制到其文件系统的某个地方,并配置dlv来知道如何定位这个源代码:

config substitute-path E:/Code/GoCode/go-server/ /home/user/somewhere/

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72746241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档