2017-04-19 206 views
3

我想写一个LLVM传递,它将提取函数调用的参数。如果争论是一个常数,我的目标是恢复常数。如何在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; 
} 

如果我通过opt跑通,它产生以下

malloc : 0x3df3f40 
i64 %0 

是什么0x3df3f40代表?为什么会产生i64%0?而不是i64512

回答

3

这是一个指向Value的指针。尝试cast<>将其更改为ConstantInt,然后致电getValue()

相关问题