构建Linux内核二进制文件的完整控制流程图

时间:2018-02-01 23:04:31

标签: linux-kernel binaryfiles static-analysis disassembly control-flow-graph

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

4 个答案:

答案 0 :(得分:1)

我们的DMS Software Reengineering Toolkit及其C Front End可以执行此操作。

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

您可以看到Control flow, Data Flow, and Call graphs

的示例

答案 1 :(得分:1)

您可以尝试CppDepend,它提供了功能强大的dependency graph功能。 但是,您必须分析源代码而不是二进制文件。

答案 2 :(得分:0)

有两种工具(CodeVizEgypt)可以在编译期间生成调用图。

我认为这对学习Linux内核没什么帮助。许多执行路径依赖于Marcos和运行时条件,因此静态分析器生成的调用图不太实用。您仍然需要使用printkdmesg来确定某些功能中发生的情况。 <{1}}更有用,而不是使用这些工具。

答案 3 :(得分:0)

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