是否有任何工具可以构建整个Linux内核二进制文件的控制流图?例如,考虑为x86架构(vmlinux文件)编译的Linux内核。 是否可以仅使用静态分析确定所有执行路径(忽略需要运行时信息的间接分支或其他控制流)?有没有适合此的工具?
答案 0 :(得分:1)
我们的DMS Software Reengineering Toolkit及其C Front End可以执行此操作。
DMS提供通用解析,控制流程图和调用图构建; C前端提供特定于C的解析细节,构建C特定流程图的逻辑包括间接得分以及在大约1600万行的代码系统上使用的点对分析,因此它应该处理Linux籽粒。流程图按每个编译单元生成;调用图用于一组链接的编译单元。所有这些信息都可以作为DMS数据结构使用,并且/或者如果您坚持并且可以输出数GB的输出,则可以作为XML导出。
的示例答案 1 :(得分:1)
您可以尝试CppDepend,它提供了功能强大的dependency graph功能。 但是,您必须分析源代码而不是二进制文件。
答案 2 :(得分:0)
有两种工具(CodeViz和Egypt)可以在编译期间生成调用图。
我认为这对学习Linux内核没什么帮助。许多执行路径依赖于Marcos和运行时条件,因此静态分析器生成的调用图不太实用。您仍然需要使用printk
和dmesg
来确定某些功能中发生的情况。 <{1}}更有用,而不是使用这些工具。
答案 3 :(得分:0)
GrammaTech CodeSonar可以对二进制代码(https://www.grammatech.com/products/binary-analysis)执行静态分析,它允许您可视化和导航控制流图。这是一个商业工具。