Compiler construction 如何获得一个程序的过程间控制流图,并使用llvm对其进行数据流分析?

Compiler construction 如何获得一个程序的过程间控制流图,并使用llvm对其进行数据流分析?,compiler-construction,llvm,code-analysis,static-analysis,control-flow-graph,Compiler Construction,Llvm,Code Analysis,Static Analysis,Control Flow Graph,在llvm中,我知道已经构造了每个函数的CFG(控制流图),CFG由函数的基本块之间的关系表示。但是我想遍历一个程序的全局CFG,它在llvm中包含许多函数。 如何获取一个程序的过程间CFG,然后对其进行数据流分析 clang/LLVM中的CFG仅作为过程内CFG存在 但是,可以运行opt工具来提取LLVM IR代码 一个文本函数,然后构建一个专用的解析器 (例如FLEX/BISON)将其交织成一个过程间CFG 虚拟呼叫CFG是什么样子的?你说的虚拟呼叫CFG是什么意思?我没听说过,你能解释一下

在llvm中,我知道已经构造了每个函数的CFG(控制流图),CFG由函数的基本块之间的关系表示。但是我想遍历一个程序的全局CFG,它在llvm中包含许多函数。 如何获取一个程序的过程间CFG,然后对其进行数据流分析 clang/LLVM中的CFG仅作为过程内CFG存在

但是,可以运行opt工具来提取LLVM IR代码 一个文本函数,然后构建一个专用的解析器
(例如FLEX/BISON)将其交织成一个过程间CFG

虚拟呼叫CFG是什么样子的?你说的虚拟呼叫CFG是什么意思?我没听说过,你能解释一下吗?谢谢。我相信@ SK逻辑意味着询问你如何期望这样一个过程间CFG中的边缘看起来像一个间接函数调用(例如,从一个调用到C++虚拟函数编译的调用)。由于存在函数指针和间接调用、虚拟方法调用等,如果对于控制流的某个小分区,这似乎是可能的,那么只要您使用的是可以在编译时确定虚拟函数表的函数子集,简单的内联就可以了(例如,函数集中使用的具有虚拟函数表的类集是已知的,即使单个实例的实际类型未知),则可以在虚拟函数表的情况下,将此类CFG的可能分支限制为编译时已知存在的虚拟函数,即使您无法内联它们。对于程序中的函数指针,也可以这样做,在这些程序中,用户对指针操作不感兴趣。