如何使用LLVM生成调用图?

时间:2012-03-30 08:53:29

标签: llvm static-analysis call-graph

我正在研究为linux内核生成一个包含函数指针的调用图(有关更多信息,请参阅我之前的问题Static call graph generation for the Linux kernel)。我被告知LLVM应该适合这个目的,但我无法在llvm.org上找到相关信息

任何帮助,包括相关文档的指示,都将不胜感激。

1 个答案:

答案 0 :(得分:13)

首先,您必须将内核编译为LLVM IR(而不是本机对象文件)。然后,使用llvm-ld将所有IR对象文件合并为一个大模块。这可能是一个非常棘手的事情,你必须大量修改makefile,但我相信它是可行的。

现在您可以进行分析了。可以使用带有opt传递的-dot-callgraph工具生成简单的调用图。它不太可能处理函数指针,因此您可能想要修改它。

跟踪所有可能带有函数指针的数据流路径是一个很大的挑战,一般情况下是不可能的(如果有任何指向整数强制转换的指针,如果指针存储在复杂的数据结构中,等等) )。对于大多数特定情况,您可以尝试实现全局抽象解释,以近似指针的所有可能数据流路径。当然,这不准确,但是你至少会得到一个保守的近似值。