微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ELF go 二进制文件默认字节对齐

如何解决ELF go 二进制文件默认字节对齐

我凭经验看到 go ELF 二进制文件使用 16 字节对齐。例如:

$ wget https://github.com/gardener/gardenctl/releases/download/v0.24.2/gardenctl-linux-amd64
$ readelf -W -s gardenctl-linux-amd64 | grep -E "FUNC" | wc -l
44746
$ readelf -W -s gardenctl-linux-amd64 | grep -E "0[ ]+[0-9]* FUNC" | wc -l
44744

所以绝大多数的最低有效字节都是 0。在 Go 二进制文件总是吗?

解决方法

这取决于平台。如果您已签出源代码库:

% cd go/src/cmd/link/internal
% grep "funcAlign =" */*.go
amd64/l.go:     funcAlign = 32
arm/l.go:       funcAlign = 4 // single-instruction alignment
arm64/l.go:     funcAlign = 16
mips64/l.go:    funcAlign = 8
ppc64/l.go:     funcAlign = 16
riscv64/l.go:   funcAlign = 8
s390x/l.go:     funcAlign = 16
x86/l.go:       funcAlign = 16

未来 amd64 的对齐方式可能会回落到 16;由于 https://github.com/golang/go/issues/35881

暂时是 32

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。