如何制作我自己的Stack Protector?

时间:2013-12-04 07:10:42

标签: llvm

我在LLVM中实现自己的堆栈保护程序作为我的大学项目的一部分。它不需要非常先进。我只需要通过编译器传递来保护我的数组不会溢出。我想在每次编译程序时用随机值增加缓冲区的大小(我知道这不是控制溢出的好方法,但就像我说它不需要非常先进)。我在以下几行做了一些事情:

for(Function::iterator Begin = F.begin(), End = F.end(); Begin!=End; ++Begin){
    for(BasicBlock::iterator I = Begin -> begin(), E = Begin -> end(); I != E; ++I){
        if(AllocaInst *instToReplace = dyn_cast<AllocaInst>(E){
            if(instToReplace -> isArrayAllocation()){
                randNo = rand() % 50 + 5;
                ReplaceInstWithInst(instToReplace -> getParent() -> getInstList, E, new AllocaInst(Type::ArrayType, randNo, "instToReplace");
            }
        }
    }
}

但是,我坚持了几件事。

  1. LLVM没有rand()功能(至少,就我所见)。
  2. 我的ReplaceInstWithInst错了,因为我用同一条指令替换相同的指令,大小不同(虽然,这正是我想要的)。
  3. 有谁可以帮助我如何获得这两条指令?

0 个答案:

没有答案