'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 IndirectJump indir_jump: The IndirectJump instance.
:return:                        True if the IRSB represents a PLT stub and we successfully resolved the target.
False otherwise.
:rtype:                         bool'

def _resolve_plt(self, addr, irsb, indir_jump):

    if self.project.loader.all_elf_objects:
        if (not any([(addr in obj.reverse_plt) for obj in self.project.loader.all_elf_objects])):
            return False
    simsucc = SimEngineVEX().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
            if ((self.project.loader.find_object_containing(target_addr) is not self.project.loader.main_object) or self.project.is_hooked(target_addr)):
                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
