[文档]deffilter(self,cfg,addr,func_addr,block,jumpkind):ifnotisinstance(self.project.simos,SimWindows):returnFalseifjumpkindnotin{"Ijk_Call","Ijk_Boring"}:returnFalseinsns=self.project.factory.block(addr).capstone.insnsifnotinsns:returnFalseifnotinsns[-1].insn.operands:returnFalseopnd=insns[-1].insn.operands[0]# Must be of the form: call qword ptr [0xABCD]returnbool(opnd.type==X86_OP_MEMandopnd.mem.dispandopnd.mem.base==X86_REG_RIPandopnd.mem.index==0)
[文档]defresolve(self,cfg,addr,func_addr,block,jumpkind,func_graph_complete:bool=True,**kwargs):# pylint:disable=unused-argumentcall_insn=self.project.factory.block(addr).capstone.insns[-1].insnaddr=(call_insn.disp+call_insn.address+call_insn.size)&0xFFFF_FFFF_FFFF_FFFFtarget=cfg._fast_memory_load_pointer(addr)iftargetisNone:l.warning("Address %#x does not appear to be mapped",addr)returnFalse,[]ifnotself.project.is_hooked(target):returnFalse,[]dest=self.project.hooked_by(target)l.debug("Resolved target to %s",dest.display_name)returnTrue,[target]