7
如果函數調用是直接的,則可以通過以下代碼獲取函數類型。如何在LLVM中調用間接時從CallInst獲取FunctionType
Function * fun = callInst->getCalledFunction();
Function * funType = fun->getFunctionType();
然而,如果呼叫是間接的,即通過一個函數指針,getCalledFunction
返回null。所以我的問題是如何通過函數指針調用函數時獲取函數類型。
感謝您的回答。我猜,Type *對於將void *指針指向函數指針已經足夠了,因爲我認爲我們需要使用BitCastInst來達到這個目的,並且這個類碰巧把Type *作爲它的參數。 – MetallicPriest 2013-02-11 12:26:34
@MetallicPriest是的,鑄造到't'就是你需要用一個任意指針來使它符合你的'callInst'。我認爲你的意思是'i8 *',但是,而不是'void *',這不是合法的LLVM類型。 – Oak 2013-02-11 14:25:58
我想獲得間接調用函數的名稱:'Value * v = CI-> getCalledValue();值* sv = v-> stripPointerCasts(); StringRef fname = sv-> getName();'但實際上並不奏效。有任何想法嗎? – eternalStudent 2015-07-31 09:27:21