我在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");
}
}
}
}
但是,我坚持了几件事。
rand()
功能(至少,就我所见)。ReplaceInstWithInst
错了,因为我用同一条指令替换相同的指令,大小不同(虽然,这正是我想要的)。有谁可以帮助我如何获得这两条指令?