2017-04-19 17 views
3

関数呼び出しの引数を抽出するLLVMパスを記述したいと思います。引数が定数の場合、私の目的はその定数が何であるかを回復することです。LLVMで関数呼び出しの引数を取得する方法は?

IRはLLVMのパスは、私がoptパススルーを実行した場合、それは0x3df3f40が何を表しているん以下

malloc : 0x3df3f40 
i64 %0 

を生成

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; 
} 

のように見えます

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

のように見えます? i64512の代わりに、なぜi64%0が生成されますか?

答えて

3

Valueへのポインタです。 cast<>ConstantIntに送信し、次にgetValue()を呼び出してみてください。

関連する問題