1

我想執行Linux內核的源代碼分析,但要做到這一點,我首先需要解析它。我有什麼選擇?我更喜歡Python可用的AST,但其他語言也可以。將Linux源代碼解析爲抽象語法樹

顯然CIL能夠解析整個內核,但是從網站上不清楚怎麼做。

回答

2

我建議從sparse靜態分析工具開始。由於sparse是專門爲幫助內核開發人員對內核執行靜態分析而設計的,因此您可以在某種程度上確保它真的應該解析內核源中使用的C99和GNU擴展的組合。我檢查過的代碼看起來乾淨而直截了當,但我從來沒有試圖以任何方式擴展它。如果您需要非常高級的概述,則Documentation/sparse.txt文件的內核源代碼使用sparse的簡短摘要。

另一個選項是GCC MELT,這是一個工具,用於爲編譯器編譯器更容易構建插件。使用它需要足夠的內部知識才能找到解決方法,但MELT看起來要比直接用C編寫類似的插件容易得多。

1

您真的需要AST嗎?或者較低級別的中間表示就足夠了?對於這兩種選擇,您都可以使用Clang,並分析其AST(不幸的是,僅用C++)或LLVM IR。

CIL也是一種選擇,但您需要在OCaml中編寫分析工具。 cilly是其替代gcc的替代品,但它可能需要一些黑客來將它與Linux內核這樣一個不平凡的構建序列一起使用。僅僅使用--merge是不夠的。