linux - 将 Linux 源代码解析为抽象语法树

标签 linux parsing compiler-construction abstract-syntax-tree

我想对 Linux 内核进行源代码分析,但要做到这一点,我首先需要对其进行解析。我有哪些选择?我更喜欢可从 python 中使用的 AST,但任何其他语言也可以。

显然 CIL能够解析整个内核,但网站上并不清楚如何解析。

最佳答案

我建议从 sparse 开始静态分析工具。因为 sparse 是专门为帮助内核开发人员对内核执行静态分析而设计的,所以您可以在某种程度上保证它确实应该解析在内核中使用的 C99 和 GNU 扩展的组合内核源代码。我检查过的代码看起来干净直接,但我从未尝试以任何方式扩展它。 Documentation/sparse.txt 文件有一个关于在内核源代码上使用 sparse 的非常简短的概要,如果您想要一个非常高级的概述。

另一个选项是 GCC MELT ,一个旨在使为 gcc 编译器构建插件变得更容易的工具。使用它需要了解足够的 gcc 内部知识才能找到解决方法,但 MELT 看起来确实比直接在 C 中编写类似的插件容易得多。

关于linux - 将 Linux 源代码解析为抽象语法树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8428408/

相关文章:

linux - 如何将 grep 结果的每个文件放入 zip 文件中

c# - DateTime.ParseExact 给出的字符串未被识别为有效的日期时间。

javascript - JSON 上的 jQuery $.each

c++ - 自定义 C++ 类上的错误

c++ - 需要一个 c++ 编译器来处理库(boost,...)

c++ - C++ 的热重编译

linux - 在没有 GUI 的 Linux 机器上通过 jenkins 执行 Selenium 测试(仅限 CLI)- HEADLESS 模式

linux - 内核模式 clock_gettime()

Linux文件异常:Device or resource busy

c++ - 在使用 new (c++) 的构造函数调用中不使用括号