我想执行Linux内核的源代码分析,但要做到这一点,我首先需要解析它。我有什么选择?我更喜欢使用python中的AST,但任何其他语言都可以。
显然CIL能够解析整个内核,但是从网站上看不清楚如何做到这一点。
答案 0 :(得分:2)
我建议从sparse
静态分析工具开始。因为sparse
是专门为帮助内核开发人员对内核执行静态分析而设计的,所以你可以保证它确实应该解析内核源代码中使用的C99和GNU扩展的组合。我检查的代码看起来干净而直接,但我从未试图以任何方式扩展它。如果您想要一个非常高级的概述,Documentation/sparse.txt
文件在内核源代码上使用sparse
的概要非常简短。
另一个选项是GCC MELT,这是一个旨在使gcc
编译器的插件更容易构建的工具。使用它需要了解足够的gcc
内部结构以找到解决方法,但MELT看起来比直接在C中编写类似的插件要容易得多。
答案 1 :(得分:1)
你真的需要AST吗?或者较低级别的中间表示就足够了?对于这两个选项,您可以使用Clang,并分析其AST(遗憾的是,仅使用C ++)或LLVM IR。
CIL也是一种选择,但您需要在OCaml中编写分析工具。 cilly
是gcc
的替代品,但它可能需要一些黑客来使用它与Linux内核这样一个非平凡的构建序列。仅使用--merge
是不够的。
答案 2 :(得分:1)
您可以查看页面Parsing Kernel 关于工具比较。获胜者似乎是KDevelop。
此致