[LLVMdev] How to get the return address on the stack on LLVM

Xueying ZHANG s1031770 at sms.ed.ac.uk
Tue Jul 26 07:49:10 PDT 2011


Hi all,

I want to implement the Xor random canary, so I have to get the return  
address in the prologue and epilogue of the function.

In the prologue of the function, before I insert into the canary on  
the stack, I can get the return address by:

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 will get the return address and it works.

While, in the epilogue of the function, due to the canary has been  
inserted. I write the similar code:

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);

But it does not work this time. I cannot get the return address.

What is problem? How can I get the return address? Thank you!

Ying


-- 
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.






More information about the llvm-dev mailing list