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

Linux kernel 为Linux内核二进制文件构建完整的控制流图,linux-kernel,binaryfiles,static-analysis,disassembly,control-flow-graph,Linux Kernel,Binaryfiles,Static Analysis,Disassembly,Control Flow Graph,是否有任何工具可以为整个Linux内核二进制文件构建控制流图?例如,考虑为X86体系结构编译的Linux内核(VMLinux文件)。 是否可以仅使用静态分析来确定所有执行路径(忽略需要运行时信息的间接分支或其他控制流)?有适合这个的工具吗 有两个工具(和)可以在编译过程中生成调用图 我认为学习Linux内核对你没有多大帮助。许多执行路径依赖于宏和运行时条件,因此静态分析器生成的调用图不是很实用。您仍然需要使用printk和dmesg来确定某些函数中发生了什么。而不是使用这些工具,printk更有

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

有两个工具(和)可以在编译过程中生成调用图

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

我们的its可以做到这一点

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


您可以看到。

GrammaTech CodeSonar可以对二进制代码()执行静态分析,它允许您可视化和导航控制流图。不过,这是一个商业工具

你可以试试,它提供了一个功能强大的系统,有很多功能。
但是,您必须分析源代码,而不是二进制文件。

我实际上希望从内核二进制文件生成cfg,而不是从编译生成cfg。但是谢谢你的回答。投票人知道这个工具不能完成任务吗?如果他告诉我们他是怎么知道的,那就太好了。问题是关于二进制分析,而不是从c文件构建cfg。2.答案并不是针对这个问题,而是它只提供了商业工具的功能(听起来不相关),从源代码构建CFG比从二进制代码构建CFG更容易。在二进制文件中,您可能有一些无法确定是代码还是数据的数据。在源代码中,您不会被这一点弄糊涂。在源代码中,您有机会确定可以从CFG中删除的路径和无效路径的公式;从二进制文件执行此操作的可能性要小得多。所以,对了,这不是从二进制代码开始的,而是从一个可能会给你更好答案的源代码开始的。如果这样的东西能够存在那就太好了,但是考虑到自动控制流图变得如此混乱,它可能不可能用于代码理解。实际上,Doxygen可能和这里提到的任何工具一样好(尽管我个人认为它没有那么有用)。