2

是否有任何工具可以为整个 Linux 内核二进制文件构建控制流图?例如,考虑为 x86 架构编译的 Linux 内核(vmlinux 文件)。是否可以仅使用静态分析来确定所有执行路径(忽略间接分支或其他需要运行时信息的控制流)?有没有适合这个的工具?

4

4 回答 4

1

有两个工具(CodeViz埃及)可以在编译期间生成调用图。

我认为学习 Linux 内核对你没有多大帮助。很多执行路径依赖于宏和运行时条件,所以静态分析器生成的调用图不是很实用。您仍然需要使用printkdmesg弄清楚某些函数中发生了什么。而不是使用这些工具,printk是比较有用的。

于 2018-02-02T01:50:48.363 回答
1

我们的DMS 软件重组工具包及其C 前端可以做到这一点。

DMS 提供通用解析、控制流图和调用图构建;C 前端提供特定于 C 的解析细节,构建特定于 C 的流程图的逻辑包括间接 goto 以及已在大约 1600 万行代码系统上使用的指向分析,因此它应该处理 Linux内核。每个编译单元生成一个流程图;调用图用于一组链接的编译单元。所有这些信息都可以作为 DMS 数据结构使用,和/或如果您坚持并且可以承受千兆字节的输出,则可以导出为 XML。

您可以查看控制流、数据流和调用图的示例。

于 2018-02-02T05:50:06.120 回答
1

你可以试试CppDepend,它提供了一个强大的依赖图,有很多特性。但是,您必须分析源代码而不是二进制文件。

于 2018-02-12T10:06:17.507 回答
0

GrammaTech CodeSonar 可以对二进制代码 ( https://www.grammatech.com/products/binary-analysis )执行静态分析,它允许您可视化和导航控制流图。虽然这是一个商业工具。

于 2018-02-09T19:19:48.243 回答