从 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中文网其他相关文章!