2017-12-26 7 views
3

다음 LLVM IR이 있고 저장 지침에서 변수 이름 string을 추출하려고합니다. 내가 어떻게 할 수 있는지 안내해주세요.LLVM 패스에서 변수 이름 가져 오기

%call = call noalias i8* @malloc(i64 100) #3 
store i8* %call, i8** %string, align 8 

내 LLVM 패스 IStoreInst 당신이 반복 할 수 있음을 확인한 후

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

처럼 보이는 I.op_begin() 사이 I.op_end() :

for (auto op = I.op_begin(); op != I.op_end(); op++) { 
    Value* v = op.get(); 
    StringRef name = v->getName(); 
} 
관련 문제