英文:
Avoid debugging information on golang
问题
我认为gc默认包含调试信息。然而,我想避免反编译。
在使用gc编译Go代码时,如何去除调试信息?
注意:
使用gccgo不能解决这个问题。如果我不使用"-g"进行编译,可执行文件会损坏,并且只会输出以下内容:
ELF可执行文件中没有调试信息 errno -1
致命错误:ELF可执行文件中没有调试信息
运行时堆栈:
ELF可执行文件中没有调试信息 errno -1
在恐慌期间发生恐慌
英文:
I think that gc includes debugging information by default. However, I want to avoid decompilation.
How can I remove the debugging information when compiling go code with gc?
Note:
Using gccgo doesn't solve the problem. If I don't compile with '-g' the executable is broken and only outputs:
no debug info in ELF executable errno -1
fatal error: no debug info in ELF executable
runtime stack:
no debug info in ELF executable errno -1
panic during panic"
答案1
得分: 17
我建议使用-ldflags="-s -w"
,它可以删除符号表和调试信息。
另外,使用Go 1.13时,可以使用-trimpath
来减少文件中存储的文件路径长度。
英文:
I recommend usage of -ldflags="-s -w"
which removes symbol table and debugging information.
As a bonus with Go 1.13 -trimpath
can be used to reduce length of file paths stored in the file
答案2
得分: 12
go链接器有一个标志-w
,它禁用了DWARF调试信息的生成。你可以通过以下方式向go工具构建命令提供链接器标志:
go build -ldflags '-w'
在Linux/Unix平台上,另一种方法是使用命令strip
对编译后的二进制文件进行处理。这似乎比上述的链接器选项生成的二进制文件更小。
英文:
The go linker has a flag -w
which disables DWARF debugging information generation. You can supply linker flags to go tool build commands as follows:
go build -ldflags '-w'
Another approach on Linux/Unix platforms is using command strip
against the compiled binary. This seems to produce smaller binaries than the above linker option.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论