如何找出 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工具或其他工具来分析函数的返回值类型?


梦里花落0921
浏览 107回答 1
1回答

SMILET

您可以通过以下方式获取签名,从而返回函数的类型 f.Signature.Results()如果您不需要调用遍历,则可以直接从结构中获取函数信息ssa.packagefor k, v := range pckg.Members {   c, ok := v.(*ssa.Function)   if ok{    ...   }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go