为了账号安全,请及时绑定邮箱和手机立即绑定

“去构建”后二进制中没有符号

“去构建”后二进制中没有符号

Go
牧羊人nacy 2022-09-12 20:17:09
我正在阅读本文以了解eBPF跟踪的工作原理,第一步是识别函数的符号,示例代码从这里获取:https://github.com/pixie-labs/pixie-demos/blob/main/simple-gotracing/app/app.go但是,在完成构建后,我无法找到该符号。为什么会这样呢?$ lsgo.mod  main.go$ grep func main.gofunc computeE(iterations int64) float64 {func main() {        http.HandleFunc("/e", func(w http.ResponseWriter, r *http.Request) {$ go build$ objdump --syms ./demowebservice | grep compute0000000000840a40 g     O .bss   0000000000000008              crypto/elliptic.p256Precomputed00000000008704c0 g     O .noptrbss      000000000000000c              crypto/elliptic.precomputeOnce$转到版本:-$ go versiongo version go1.16.5 linux/amd64
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

您的函数将被内联,因此函数名称不会在可执行二进制文件中留下任何“标记”。您可以使用 来查看生成过程中有哪些函数。computeE()go build -gcflags=-minlined


$ go build -gcflags=-m |& grep inlining

./main.go:24:17: inlining call to http.HandleFunc

./main.go:24:17: inlining call to http.(*ServeMux).HandleFunc

./main.go:43:12: inlining call to fmt.Printf

./main.go:44:28: inlining call to http.ListenAndServe

./main.go:46:13: inlining call to fmt.Printf

./main.go:40:53: inlining call to computeE      <-- NOTE THIS

如果禁用内联:


//go:noinline

func computeE(iterations int64) float64 {

    // ...

}

然后构建并再次检查:


$ go build -gcflags=-m |& grep inlining

./main.go:24:17: inlining call to http.HandleFunc

./main.go:24:17: inlining call to http.(*ServeMux).HandleFunc

./main.go:43:12: inlining call to fmt.Printf

./main.go:44:28: inlining call to http.ListenAndServe

./main.go:46:13: inlining call to fmt.Printf


$ objdump --syms ./demowebservice | grep compute

然后输出将如下所示:


000000000062a940 g     F .text  000000000000004c              main.computeE

0000000000840a40 g     O .bss   0000000000000008              crypto/elliptic.p256Precomputed

00000000008704c0 g     O .noptrbss      000000000000000c              crypto/elliptic.precomputeOnce


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号