2017-12-26 27 views
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; 
} 

答えて

2

次のようになります。

for (auto op = I.op_begin(); op != I.op_end(); op++) { 
    Value* v = op.get(); 
    StringRef name = v->getName(); 
} 
関連する問題