Как получить межпроцедурный график потока управления для одной программы и выполнить анализ потока данных на нем с помощью llvm?
В 11vv я знаю, что CFG(график потока управления) каждой функции был построен, и CFG представлен отношениями между основными блоками функций. Но я хочу пересмотреть глобальный CFG одной программы, которая включает в себя много функций в llvm. Как я могу получить межпроцедурный CFG одной программы, а затем провести анализ потока данных на нем?
1 ответ
Согласно http://clang.llvm.org/doxygen/classclang_1_1CFG.html CFG в clang/LLVM существует только как внутрипроцедурный CFG.
Тем не менее, можно запустить инструмент opt для кодирования IR LLVM и извлечь текстовый CFG функций, а затем создать выделенный синтаксический анализатор (например, FLEX/BISON) для чередования его в один межпроцедурный CFG.