3
私は以下のLLVM IRを持っており、変数名string
をストア命令から抽出したいと思います。どうすればいいのか教えてください。LLVMパスで変数名を取得
%call = call noalias i8* @malloc(i64 100) #3
store i8* %call, i8** %string, align 8
マイLLVMパスがI
あなたはI.op_begin()
とI.op_end()
の間で反復することができますStoreInst
であることを確認した後
virtual bool runOnModule(Module &M) {
for (Function &F: M) {
for (BasicBlock &B: F) {
for (Instruction &I: B) {
if(CallInst* call_inst = dyn_cast<CallInst>(&I)) {
Function* fn = call_inst->getCalledFunction();
StringRef fn_name = fn->getName();
errs() << fn_name << " : " << call_inst->getArgOperand(0) << "\n";
//for(auto args = fn->arg_begin(); args != fn->arg_end(); ++args) {
// ConstantInt* arg = dyn_cast<ConstantInt>(&(*args));
// errs() << arg->getValue() << "\n";
//}
} else {
errs() << I.getName() << "\n" << I.getOpcodeName();
}
}
}
}
return false;
}