def arguments(self, xdata: InstrXData) -> List[XXpr]: if xdata.has_indirect_call_target_exprs(): return xdata.xprs[2:] elif xdata.has_call_target(): return xdata.xprs else: return []
def annotation(self, xdata: InstrXData) -> str: """data format: a:xx... + c direct call / resolved indirect call: xprs[0..] arguments calltarget unresolved indirect call: xprs[0] target expression xprs[1] target expression (simplified) xprs[2...] arguments """ if xdata.has_indirect_call_target_exprs(): tgtx = xdata.xprs[1] callargs = xdata.xprs[2:] return str(tgtx) + "(" + ",".join([str(x) for x in callargs]) + ")" elif xdata.has_call_target(): ctgt = xdata.call_target(self.ixd) callargs = xdata.xprs return str(ctgt) + "(" + ",".join([str(x) for x in callargs]) + ")" else: return "call to " + str(self.tgtoperand)
def is_unresolved_call(self, xdata: InstrXData) -> bool: return xdata.has_indirect_call_target_exprs()