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



你好,我是静态分析的新手,尝试使用golang的SSA包来分析我们的代码。例如,我想打印包中的所有功能信息,示例代码是:

dir := PROJECT_PATH
cfg := 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工具或其他工具来分析函数的返回值类型?

您可以通过获得签名,从而返回函数的类型

f.Signature.Results()

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

for k, v := range pckg.Members {
c, ok := v.(*ssa.Function)
if ok{
...
}
}

最新更新