Разбор исходного кода Linux в абстрактное синтаксическое дерево - PullRequest
1 голос
/ 08 декабря 2011

Я бы хотел выполнить анализ исходного кода ядра Linux, но для этого мне сначала нужно разобрать его.Какие у меня варианты?Я бы предпочел использовать AST из python, но любой другой язык тоже подойдет.

Видимо CIL может анализировать все ядро, но с сайта не понятно, как это сделатьчто.

Ответы [ 3 ]

2 голосов
/ 08 декабря 2011

Я бы рекомендовал начать с инструмента статического анализа sparse.Поскольку sparse был специально разработан для того, чтобы помочь разработчикам ядра в проведении статического анализа на ядре, вы можете иметь определенный уровень уверенности в том, что он действительно должен анализировать комбинацию расширений C99 и GNU, которые используются в исходных кодах ядра.Код, который я изучил, выглядел чистым и понятным, но я никогда не пытался его расширять.Файл Documentation/sparse.txt имеет очень краткий обзор использования sparse в исходных текстах ядра, если вам нужен обзор очень высокого уровня.

Другой вариант - GCC MELT , инструментразработан для облегчения создания плагинов для компилятора gcc.Чтобы использовать его, нужно знать достаточно gcc внутренних компонентов, но MELT выглядит гораздо проще, чем кодировать аналогичный плагин непосредственно в C.

1 голос
/ 16 января 2013

Вы можете проверить страницу Ядро синтаксического анализа об инструментах сравнения. Похоже, победителем стал KDevelop.

С уважением,

1 голос
/ 08 декабря 2011

Вам действительно нужен АСТ? Или промежуточного представления более низкого уровня будет достаточно? Для обоих вариантов вы можете использовать Clang и анализировать его AST (к сожалению, только с C ++) или IR LLVM.

CIL также вариант, но вам нужно написать свой инструмент анализа в OCaml. cilly является заменой для gcc, но может потребоваться некоторый взлом для использования его с такой нетривиальной последовательностью сборки, как ядро ​​Linux. Одного использования --merge будет недостаточно.

...