0
我想实现Xor随机金丝雀,所以我必须在函数的序言和结尾处获取返回地址。如何在LLVM上获取栈上的返回地址
在功能的序幕,之前我插入堆栈上的金丝雀,我可以得到的返回地址:
ConstantInt* ci = llvm::ConstantInt::get(Type::getInt32Ty(RI->getContext()), 0);
Value* Args1[] = {ci};
CallInst* callInst = CallInst::Create(Intrinsic::getDeclaration(M, Intrinsic::returnaddress),
&Args1[0], array_endof(Args1), "Call Return Address", InsPt);
callInst将获得返回地址和它的作品。
虽然,在功能的结尾,由于金丝雀已被插入。我写了类似的代码:
ConstantInt* ci2 = llvm::ConstantInt::get(Type::getInt32Ty(RI->getContext()), 1);
Value* Args3[] = {ci2};
CallInst* callInst1 = CallInst::Create(Intrinsic::getDeclaration(M, Intrinsic::returnaddress),
&Args3[0], array_endof(Args3), "Caaall Return Address", BB);
但是这次不行。我无法得到返回地址。
什么是问题?我怎样才能得到返回地址?