docs: def _scan_block(self, cfg_job):
          """
          Scan a basic block starting at a specific address
  
          :param CFGJob cfg_job: The CFGJob instance.
          :return: a list of successors
          :rtype: list
          """
  
          addr = cfg_job.addr
          current_func_addr = cfg_job.func_addr
  
          # Fix the function address
          # This is for rare cases where we cannot successfully determine the end boundary of a previous function, and
          # as a consequence, our analysis mistakenly thinks the previous function goes all the way across the boundary,
          # resulting the missing of the second function in function manager.
          if addr in self._function_addresses_from_symbols:
              current_func_addr = addr
  
          if self._addr_hooked_or_syscall(addr):
              entries = self._scan_procedure(cfg_job, current_func_addr)
  
          else:
              entries = self._scan_irsb(cfg_job, current_func_addr)
  
          return entries