随机迭代llvm ::函数中的指令

问题描述 投票:2回答:1

有没有办法在函数中随机迭代llvm :: Instructions?假设一个函数有几个分支。每次迭代函数的指令时,我想随机跟随不同的路径。

llvm llvm-ir
1个回答
0
投票

首先,创建一个返回随机迭代器的函数:

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.