假设一个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
发布于 2022-06-24 23:23:48
不,dlv没有反编译程序,虽然与C或C++相比,Go在运行时拥有更多关于程序的元数据--很难恢复编译过程,但是您不太可能从反编译器获得源代码中的原始程序。
我想您要问的是,如果您可以使用来自另一个主机的源代码列表进行调试,请注意,调试器通常不会对程序进行反编译(除非它们是用来在没有源代码的情况下调试的,比如IDA),而是编译器创建元数据,将每条指令引用到原始源代码文件及其行中,然后调试器可以加载这个源代码文件并构建它的特性,就像源代码级别一样,您需要的是将所有源代码复制到其文件系统的某个地方,并配置dlv来知道如何定位这个源代码:
config substitute-path E:/Code/GoCode/go-server/ /home/user/somewhere/
请记住,需要保持可执行文件与编译时使用的原始源代码同步,否则调试器可能会显示错误的行偏移量。
https://stackoverflow.com/questions/72746241
复制相似问题