2017-04-19 11 views
3

함수 호출의 인수를 추출 할 LLVM 패스를 작성하고 싶습니다. 논쟁이 일정한 것 인 경우에, 나의 목적은 그 상수가 인 무슨을 재기하기위한 것이다. 내가 opt을 통해 패스를 실행하면LLVM에서 함수 호출의 인수를 얻는 방법?

%2 = call noalias i8* @malloc(i64 512) #3 

LLVM 패스

bool runOnFunction(Function &F) override { 
    for (auto& B : F) { 
     for (auto& 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 arg = fn->arg_begin(); arg != fn->arg_end(); ++arg) { 
        errs() << *arg << "\n"; 
       } 
      } 
     } 
    } 

    return false; 
} 

모양처럼

적외선 보이는, 다음

malloc : 0x3df3f40 
i64 %0 

0x3df3f40는 무엇을 상징 하는가 생산 ? i64512 대신에 왜 i64%0이 생성됩니까?

답변

3

Value에 대한 포인터입니다. cast<>ConstantInt으로 시도한 다음 getValue()을 호출하십시오.