有没有办法从机器指令中获取被调用的函数?
现在我正在确定机器指令是否是函数调用,如下所示:
for (MachineBasicBlock &MBB : MF) {
for (MachineInstr &MI : MBB) {
if (MI.getDesc().isCall()) {
// Function call
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试图遵循这一点,但我在所有情况下都得到了isSymbol()同样的结果。false
我只对直接调用感兴趣(函数指针被忽略)。
您应该能够直接转换第一个操作数:
if(MI.getOperand(0).getType() == llvm::MachineOperand::MO_GlobalAddress) {
const GlobalValue *GV = MI.getOperand(0).getGlobal();
const Function *Callee = dyn_cast<Function>(GV);
assert(Callee != nullptr && "Unexpected type of global value");
}
Run Code Online (Sandbox Code Playgroud)