如何在LLVM中实现反向数据流分析?我们需要自己实现工作清单算法吗?

时间:2019-06-10 07:22:55

标签: llvm dataflow soot

我想使用LLVM进行向后数据流分析。目前,我只是创建一个新的Pass类:

class BwdfPass: public llvm::ModulePass{}

然后,实现runOnModule方法和runOnFunction方法。但是,我只看到了一些示例,例如:

void BwdfPass::runOnFunction(Function &function){
    for(BasicBlock & bb: function){
        for(Instruction &inst:bb){
            //do some action
        }
    }
}

我曾经用烟灰进行数据流分析。 Soot提供了一个BackwardFlowAnalysis接口,我只需要在doAnalysis()方法中实现传递函数。其界面提供了实现定点分析的工作清单算法。 但是,在LLVM中,是否有任何类似的机制?这是否意味着我需要自己实现工作列表算法,并按相反的顺序遍历所有指令?

1 个答案:

答案 0 :(得分:-1)

我鼓励您查看我们的LLVM扩展Phasar: https://phasar.org/

它提供的功能类似于Soot for Java。