首页 > 后端开发 > Golang > 如何从 Go 二进制 TEXT 指令中删除文件路径?

如何从 Go 二进制 TEXT 指令中删除文件路径?

Susan Sarandon
发布: 2024-12-11 18:13:11
原创
711 人浏览过

How Can I Remove File Paths from Go Binary TEXT Directives?

从 Go 二进制文件中的文本指令中删除文件路径

问题:

构建 Go 时可执行文件,路径信息,例如“/Users/myuser/dev/go/src/fooapi/spikes/mongoapi.go”通常包含在程序集中的 TEXT 指令中。在某些情况下,此路径信息可能是不需要的。

解决方案:

要删除文件路径信息,请在执行期间将 -trimpath 标志与 -gcflags 和 -asmflags 结合使用构建过程:

CGO_ENABLED=0 go build -v -a -ldflags="-w -s" \
    -gcflags=-trimpath=/Users/myuser/dev/go/src \
    -asmflags=-trimpath=/Users/myuser/dev/go/src \
    -o ./fooapi spikes/mongoapi.go
登录后复制

如何有效:

将 -trimpath 传递给 -gcflags 和 -asmflags 会从 elf 二进制文件中删除任何路径信息。这可确保程序集中的 TEXT 指令仅包含相关的函数名称和偏移量,而不包含关联的文件路径。

验证:

您可以使用以下方式验证结果go tool objdump 命令:

$ go tool objdump ./fooapi
.
.
TEXT main.init(SB) api/spikes/mongoapi.go
mongoapi.go:60  0x12768c0   65488b0c25a0080000  GS MOVQ GS:0x8a0, CX
mongoapi.go:60  0x12768c9   483b6110        CMPQ 0x10(CX), SP
mongoapi.go:60  0x12768cd   7663            JBE 0x1276932
.
.
登录后复制

如你所见,文件路径“/Users/myuser/dev/go/src/api/spikes/mongoapi.go”已从 TEXT 指令中删除。

其他信息:

使用不建议使用 strip 工具删除文件路径信息,因为它可能会导致可执行文件损坏。 -trimpath 标志提供了一种更受控和更可靠的方式来实现所需的结果。

以上是如何从 Go 二进制 TEXT 指令中删除文件路径?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板