2012-02-01 156 views

回答

3

嗯,這裏是一個基本的FunctionPass是找到對函數的調用:

class MyPass : public FunctionPass { 
public: 
    static char ID; 

    MyPass() 
     : FunctionPass(ID) 
    {} 

    virtual bool runOnFunction(Function &F) { 
     for (Function::iterator bb = F.begin(), bb_e = F.end(); bb != bb_e; ++bb) { 
      for (BasicBlock::iterator ii = bb->begin(), ii_e = bb->end(); ii != ii_e; ++ii) { 
       if (CallInst *callInst = dyn_cast<CallInst>(&*ii)) { 
        Function *calledFunc = callInst->getCalledFunction(); 
        errs() << "Calling function " << calledFunc->getName() << "\n"; 
       } 
      } 
     } 
    } 
}; 

它打印出的由它的工作在函數調用的所有函數的名稱。 getName給你一個StringRef,所以隨時與任何你想要的值進行比較。