本文整理汇总了C++中MemCpyInst::getOperand方法的典型用法代码示例。如果您正苦于以下问题:C++ MemCpyInst::getOperand方法的具体用法?C++ MemCpyInst::getOperand怎么用?C++ MemCpyInst::getOperand使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MemCpyInst
的用法示例。
在下文中一共展示了MemCpyInst::getOperand方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: visitMemCpyInst
void PandaInstrumentVisitor::visitMemCpyInst(MemCpyInst &I){
Function *F = mod->getFunction("log_dynval");
if (!F) {
printf("Instrumentation function not found\n");
assert(1==0);
}
PtrToIntInst *PTII_SRC;
PtrToIntInst *PTII_DST;
CallInst *CI_SRC;
CallInst *CI_DST;
std::vector<Value*> argValues_src;
std::vector<Value*> argValues_dst;
PTII_DST = static_cast<PtrToIntInst*>(IRB.CreatePtrToInt(
I.getOperand(0), wordType));
argValues_dst.push_back(ConstantInt::get(ptrType,
(uintptr_t)dynval_buffer));
argValues_dst.push_back(ConstantInt::get(intType, ADDRENTRY));
argValues_dst.push_back(ConstantInt::get(intType, STORE));
argValues_dst.push_back(static_cast<Value*>(PTII_DST));
PTII_SRC = static_cast<PtrToIntInst*>(IRB.CreatePtrToInt(
I.getOperand(1), wordType));
argValues_src.push_back(ConstantInt::get(ptrType,
(uintptr_t)dynval_buffer));
argValues_src.push_back(ConstantInt::get(intType, ADDRENTRY));
argValues_src.push_back(ConstantInt::get(intType, LOAD));
argValues_src.push_back(static_cast<Value*>(PTII_SRC));
//The load must come first in the dynamic log
CI_SRC = IRB.CreateCall(F, ArrayRef<Value*>(argValues_src));
CI_SRC->insertBefore(static_cast<Instruction*>(&I));
PTII_SRC->insertBefore(static_cast<Instruction*>(CI_SRC));
//The store must come second in the dynamic log
CI_DST = IRB.CreateCall(F, ArrayRef<Value*>(argValues_dst));
CI_DST->insertBefore(static_cast<Instruction*>(&I));
PTII_DST->insertBefore(static_cast<Instruction*>(CI_DST));
}