ld-linux - проверять коды выхода - PullRequest
5 голосов
/ 10 августа 2009

Проверяя источник из / usr / bin / ldd, я вижу, что он использует ld-linux для поиска зависимостей исполняемого файла, хотя сначала он вызывает ld-linux с аргументом --verify. Затем скрипт действует по-разному в соответствии с кодом завершения вызова ld-linux --verify.

Страница man для ld-linux не предоставляет никакой информации о кодах выхода, а поиск в Google ничего не дает. Где-нибудь есть документация (кроме просмотра исходного кода ld-linux), в которой содержится список кодов выхода для ld-linux --verfify и их соответствующих значений?

Ответы [ 2 ]

4 голосов
/ 25 февраля 2013

Я не нашел никакой документации, но ...

  if (__builtin_expect (mode, normal) == verify)
    {
      /* We were called just to verify that this is a dynamic
         executable using us as the program interpreter.  Exit with an
         error if we were not able to load the binary or no interpreter
         is specified (i.e., this is no dynamically linked binary.  */
      if (main_map->l_ld == NULL)
        _exit (1);

      /* We allow here some platform specific code.  */
#ifdef DISTINGUISH_LIB_VERSIONS
      DISTINGUISH_LIB_VERSIONS;
#endif
      _exit (has_interp ? 0 : 2);
    }

Итак ...

  • 0 означает успех, т.е. программа динамически связана, и это динамический компоновщик может справиться с этим "
  • 1 означает, что ld-linux "не смог загрузить бинарный файл" (я получил это когда я запускал ld-linux с несуществующим, недвоичным или статическим двоичным файлом)
  • 2 означает «переводчик не указан». В частности, в таблице заголовков программы нет элемента с p_type, равным PT_INTERP (я получаю это при запуске ld-linux с разделяемой библиотекой)

Других кодов нет.

1 голос
/ 10 августа 2009

Я провел несколько экспериментов, и состояние выхода равно нулю при успехе и 1 при ошибке. Это включает в себя гротескное злоупотребление, например, просьбу проверить скрипт оболочки.

Вы были бы в безопасности, предполагая ноль в случае успеха, ненулевое значение в случае отказа и никакой другой информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...