code: def _resolve_plt(self, addr, irsb, indir_jump):
          
  
          # 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).vex
  
          # try to resolve the jump target
          simsucc = self.project.engines.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
                  if (self.project.loader.find_object_containing(target_addr, membership_check=False) 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
docs: 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