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

如何找出 golang SSA 函数返回类型

如何找出 golang SSA 函数返回类型

Go
梦里花落0921 2022-08-30 21:57:17
你好,我是静态分析的新手,并尝试使用golang的SSA包来分析我们的代码。例如,我想打印包中的所有函数信息,示例代码是:dir := PROJECT_PATHcfg := packages.Config{    Mode: packages.LoadAllSyntax,    Dir: dir,}initial, _ := packages.Load(&cfg, "./")// Create SSA packages for well-typed packages and their dependencies.prog, _ := ssautil.AllPackages(initial, 0)// Build SSA code for the whole program.prog.Build()callGraph = cha.CallGraph(prog)for f, node := range callGraph.Nodes{    // f is of ssa.Function     fmt.Println("func:", f, f.Name(), f.Syntax(), f.Params)}然后我发现我没有办法访问这个函数的返回值的类型(参考 https://pkg.go.dev/golang.org/x/tools/go/ssa#Function 的文档)有没有办法通过使用ssa工具或其他工具来分析函数的返回值类型?
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

您可以通过以下方式获取签名,从而返回函数的类型


 f.Signature.Results()

如果您不需要调用遍历,则可以直接从结构中获取函数信息ssa.package


for k, v := range pckg.Members {

   c, ok := v.(*ssa.Function)

   if ok{

    ...

   }

}


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信