【发布时间】:2019-04-01 22:03:26
【问题描述】:
有没有办法在函数中随机迭代 llvm::Instructions?假设一个函数有几个分支。每次迭代函数的指令时,我想随机遵循不同的路径。
【问题讨论】:
有没有办法在函数中随机迭代 llvm::Instructions?假设一个函数有几个分支。每次迭代函数的指令时,我想随机遵循不同的路径。
【问题讨论】:
首先,创建一个返回随机迭代器的函数:
template<typename T>
typename T::iterator getRandomIterator(T& t)
{
if(!t.size())
return t.end();
size_t randIdx = ::rand() % t.size();
auto i = t.begin();
std::advance(i, randIdx);
return i;
}
然后将您要处理的所有指令复制到一个临时向量中:
#include <llvm/IR/InstIterator.h>
std::vector<Instruction*> insts;
std::copy(inst_begin(F), inst_end(F), insts);
然后走过它们,直到您访问每条指令:
while(!insts.empty())
{
auto It = getRandomIterator(insts);
// do something
insts.erase(It);
}
【讨论】: