llvm - 如何使用 LLVM 生成调用图?

标签 llvm static-analysis call-graph

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

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

最佳答案

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

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

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

关于llvm - 如何使用 LLVM 生成调用图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9939794/

相关文章:

c++ - 从 C++ 中的嵌入式 LLVM 生成二进制代码(共享库)

objective-c - LLVM 4.0 可以在 Xcode 4.3 中使用吗?

c - 如何将c代码的函数调用树转储到文件中?

gcc - LLVM 与 GCC MIPS 代码生成,任何基准?

llvm - 运行cloud9时出错 "error: ld terminated with signal 11"

java - Sonar 在使用 Maven 进行分析时显示错误消息

perl - 是否有从 Perl 模块文件中提取所有变量、模块和函数名称的工具?

static-analysis - Frama-c WP 和先决条件

c++ - 如何为 C++ 代码生成调用图

c++ - 如何从调用图中省略内置函数