为了避免反编译,必须从已编译的 Go 代码中删除调试信息。虽然 Go 编译器 (gc) 的默认行为包含调试信息,但有一些方法可以删除它。
使用 -ldflags 的解决方案:
使用 -ldflags 标志编译期间:
go build -ldflags="-s -w"
此标志设置链接器标志以删除符号表 (-s) 和调试信息(-w).
使用 -trimpath 的解决方案:
此外,在 Go 1.13 及更高版本中,您可以使用 -trimpath 来减少存储在中的文件路径的长度可执行文件。这可以进一步防止反编译尝试。
go build -ldflags="-s -w -trimpath=/path/to/trim"
注意:
使用 gccgo 不是一个可行的解决方案,因为它需要调试信息才能正常运行。使用 -g 标志删除调试信息将导致可执行文件损坏。因此,推荐的方法是 -ldflags 和 -trimpath。
以上是如何从已编译的 Go 代码中删除调试信息以防止反编译?的详细内容。更多信息请关注PHP中文网其他相关文章!