Как получить контрольный график программы?
Я хочу получить граф управления потоком кода / программы (будь то любой язык программирования и учитывая его грамматику). Я попытался использовать библиотеку lark в python для анализа базовой программы на C [я предоставил грамматику для базового синтаксиса c для lark]. В результате он дал мне объект разбора дерева или чего-то подобного, теперь я задаюсь вопросом, куда двигаться дальше.
Сказав это, любой новый подход высоко ценится. Основная цель состоит в том, чтобы получить граф управления потоком кода / программы, учитывая грамматику языка, на котором он написан.
1 ответ
В результате он дал мне объект разбора дерева или чего-то подобного, теперь я задаюсь вопросом, куда двигаться дальше.
Общий подход заключается в
- пройтись по дереву, чтобы создать промежуточное представление, в котором все циклические и условные конструкции заменены переходами,
- разделите инструкции ИК на базовые блоки, начиная новый блок перед каждой меткой перехода и после каждого прыжка, а затем
- построить граф потока управления, где базовые блоки - это узлы, каждый блок, который не заканчивается скачком, имеет ребро к блоку, который следует за ним, а каждый блок, который заканчивается скачком, имеет ребро к возможному скачку цели (где цели перехода для традиционной инструкции условного перехода будут включать следующий блок).
Основная цель состоит в том, чтобы получить граф управления потоком кода / программы, учитывая грамматику языка, на котором он написан.
Вы не можете получить CFG программы, если все, что вы знаете о языке, это его грамматика. Вам понадобится некоторое понимание семантики языка, чтобы создать CFG.