【问题标题】:Parsing Linux source into abstract syntax tree将 Linux 源代码解析为抽象语法树
【发布时间】:2012-01-15 17:41:29
【问题描述】:

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

显然CIL 能够解析整个内核,但从网站上并不清楚如何做到这一点。

【问题讨论】:

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


    【解决方案1】:

    您可以查看页面Parsing Kernel 关于工具比较。获胜者似乎是 KDevelop。

    问候,

    【讨论】:

      【解决方案2】:

      您真的需要 AST 吗?或者较低级别的中间表示就足够了?对于这两个选项,您都可以使用 Clang,并分析其 AST(遗憾的是,仅使用 C++)或 LLVM IR。

      CIL 也是一种选择,但您需要在 OCaml 中编写分析工具。 cillygcc 的替代品,但它可能需要一些技巧才能将它与 Linux 内核这样的非平凡构建序列一起使用。仅使用 --merge 是不够的。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-30
          • 2016-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多