1

Linuxカーネルのソースコード解析を行いたいが、それを行うにはまず解析する必要がある。私の選択肢は何ですか?私は、ASTをPythonから使える方が好きですが、他の言語もOKです。Linuxソースを抽象構文木に構文解析する

明らかにCILはカーネル全体を解析できますが、それをどうやって行うのかはウェブサイトからは分かりません。

答えて

2

静的解析ツールのsparseから始めることをおすすめします。 sparseは、カーネル開発者がカーネルで静的解析を行う際に役立つように特別に設計されているため、カーネルソースで使用されているC99とGNU拡張の組み合わせを本当に解析する必要があります。私が調べたコードはきれいでまっすぐに見えましたが、決してそれを拡張しようとはしませんでした。 Documentation/sparse.txtファイルには、非常に高いレベルの概要が必要な場合は、カーネルソースでsparseを使用するという非常に短い概要があります。

もう1つのオプションは、gccコンパイラのプラグインを簡単に作成できるように設計されたGCC MELTです。あなたの周りを見つけるのに十分なgcc内部を知っている必要がありますが、MELTはCで直接同様のプラグインをコーディングするよりはるかに簡単に見えます。

1

本当にASTが必要ですか?または、より低いレベルの中間表現で十分でしょうか?どちらのオプションについても、Clangを使用してAST(悲しいことに、C++のみ)またはLLVM IRを分析することができます。

CILもオプションですが、分析ツールをOCamlに書き込む必要があります。 cillyは、gccの代わりにドロップインされますが、Linuxカーネルのような重要なビルドシーケンスを使用するためには、何らかのハッキングが必要な場合があります。 --mergeを使用するだけでは十分ではありません。

1

ツールの比較についてはParsing Kernel のページをご覧ください。勝者はKDevelopのようです。

よろしくお願いします。

関連する問題