(self, addr, irsb, indir_jump: IndirectJump)
return False
Determine if the IRSB at the given address is a PLT stub. If it is, concretely execute the basic block to
        resolve the jump target.

        :param int addr:                Address of the block.
        :param irsb:                    The basic block.
        :param indir_jump:              The IndirectJump instance.
        :return:                        True if the IRSB represents a PLT stub and we successfully resolved the target.
                                        False otherwise.
        :rtype:                         bool
Determine if the IRSB at the given address is a PLT stub. If it is, concretely execute the basic block to
        resolve the jump target.
Determine if the IRSB at the given address is a PLT stub . If it is concretely execute the basic block to resolve the jump target .
def _resolve_plt(self, addr, irsb, indir_jump: IndirectJump):
        """
        Determine if the IRSB at the given address is a PLT stub. If it is, concretely execute the basic block to
        resolve the jump target.

        :param int addr:                Address of the block.
        :param irsb:                    The basic block.
        :param indir_jump:              The IndirectJump instance.
        :return:                        True if the IRSB represents a PLT stub and we successfully resolved the target.
                                        False otherwise.
        :rtype:                         bool
        """

        # is the address identified by CLE as a PLT stub?
        if self.project.loader.all_elf_objects:
            # restrict this heuristics to ELF files only
            if not any([ addr in obj.reverse_plt for obj in self.project.loader.all_elf_objects ]):
                return False

        # Make sure the IRSB has statements
        if not irsb.has_statements:
            irsb = self.project.factory.block(irsb.addr, size=irsb.size, opt_level=1, cross_insn_opt=False).vex

        # try to resolve the jump target
        simsucc = self.project.factory.default_engine.process(self._initial_state, irsb, force_addr=addr)
        if len(simsucc.successors) == 1:
            ip = simsucc.successors[0].ip
            if ip._model_concrete is not ip:
                target_addr = ip._model_concrete.value
                obj = self.project.loader.find_object_containing(target_addr, membership_check=False)
                if (obj is not None and obj is not self.project.loader.main_object) \
                        or self.project.is_hooked(target_addr):
                    # resolved!
                    # Fill the IndirectJump object
                    indir_jump.resolved_targets.add(target_addr)
                    l.debug("Address %#x is resolved as a PLT entry, jumping to %#x", addr, target_addr)
                    return True

        return False
def _resolve_plt ( self , addr , irsb , indir_jump : IndirectJump ) : # is the address identified by CLE as a PLT stub? if self . project . loader . all_elf_objects : # restrict this heuristics to ELF files only if not any ( [ addr in obj . reverse_plt for obj in self . project . loader . all_elf_objects ] ) : return False # Make sure the IRSB has statements if not irsb . has_statements : irsb = self . project . factory . block ( irsb . addr , size = irsb . size , opt_level = 1 , cross_insn_opt = False ) . vex # try to resolve the jump target simsucc = self . project . factory . default_engine . process ( self . _initial_state , irsb , force_addr = addr ) if len ( simsucc . successors ) == 1 : ip = simsucc . successors [ 0 ] . ip if ip . _model_concrete is not ip : target_addr = ip . _model_concrete . value obj = self . project . loader . find_object_containing ( target_addr , membership_check = False ) if ( obj is not None and obj is not self . project . loader . main_object ) or self . project . is_hooked ( target_addr ) : # resolved! # Fill the IndirectJump object indir_jump . resolved_targets . add ( target_addr ) l . debug ( "Address %#x is resolved as a PLT entry, jumping to %#x" , addr , target_addr ) return True return False