Man pages на русском

         

SYMS(4)


НАЗВАНИЕ

syms - формат таблицы имен в обычном об ектном файле

СИНТАКСИС

#include <syms.h>

ОПИСАНИЕ

Объектные файлы обычного формата содержат информацию для поддержки, отладки в терминах исходного языка [см. ]. Информация о номерах строк [см. ] и об именах, встречающихся в программе, позволяет отлаживать программу на уровне исходного C-текста. Каждая таблица имен в объектном файле устроена следующим образом:

  • Имя первого файла.
    • Имя первой функции.
      • Локальные имена из первой функции.
      • Имя второй функции.
        • Локальные имена из второй функции.
        • ...
        • Имена, локальные в первом файле (описанные вне
        • функций как static).
        • Имя второго файла.
          • Имя первой функции.
            • Локальные имена из первой функции.
            • Имя второй функции.
              • Локальные имена из второй функции.
              • ...
              • Имена, локальные во втором файле.
              • ...
              • Определенные глобальные имена.
              • Неопределенные глобальные имена.
              • Таблица имен состоит из элементов фиксированной длины (18 байт). Элемент, описывающий имя, кроме собственно текста имени, дополненного нулями, содержит его значение и другую информацию. Ниже приведена соответствующая C-структура:

                #define SYMNMLEN 8 /* Максимальное количество символов в тексте имени */ #define FILNMLEN 14 /* Максимальное количество символов в имени файла */ #define DIMNUM 4 /* Размерность массива во вспомогательном разделе */

                struct syment { union { /* Все способы описать текст имени */ char _n_name[SYMNMLEN]; /* Текст имени */ struct { long _n_zeroes; /* Если == 0, то в таблице цепочек */ long _n_offset; /* Смещение в табл. цепочек */ } _n_n; char *_n_nptr[2]; } _n; long n_value; /* Значение имени */ short n_scnum; /* Номер секции */ unsigned short n_type; /* Тип и производный тип */ char n_sclass; /* Класс памяти */ char n_numaux; /* Число вспомогательных элементов */ };

                #define n_name _n._n_name #define n_zeroes _n._n_n._n_zeroes #define n_offset _n._n_n._n_offset #define n_nptr _n._n_nptr[1]

                Смысл значений имен пояснен во включаемом файле <syms.h>. Для описания некоторых имен требуется больше информации, чем содержится в одном элементе; в таком случае за первым элементом, описывающим имя, следуют вспомогательные элементы. Вспомогательные элементы имеют тот же размер, что и основные; их формат приведен ниже:


                union auxent { struct { long x_tagndx; /* Индекс описателя структуры, об единения или перечисления */ union { struct { unsigned short x_lnno; /* Номер строки определения */ unsigned short x_size; /* Размер массива, структуры или об единения */ } x_lnsz; long x_fsize; /* Размер функции */ } x_misc; union { struct { long x_lnnoptr; long x_endndx; } x_fcn; struct { /* Если массив, то его размерности (до 4) */ unsigned short x_dimen [DIMNUM]; } x_ary; } x_fcnary; unsigned short x_tvndx; } x_sym; struct { char x_fname [FILNMLEN]; /* Имя файла (занимает весь элемент) */ } x_file; struct { long x_scnlen; /* Длина секции */ unsigned short x_nreloc; /* Число элем. с инф. о настройке ссылок */ unsigned short x_nlinno; /* Число элем. с инф. о номерах строк */ } x_scn; struct { long x_tvfill; unsigned short x_tvlen; unsigned short x_tvran[2]; } x_tv; };

                Элементы таблицы имен нумеруются, начиная с 0.

                СМ. ТАКЖЕ

                a.out(4), .

                в Справочнике пользователя.

                ПРЕДОСТЕРЕЖЕНИЯ

                На компьютерах, у которых тип int эквивалентен типу long, вместо long в таблице имен указывается int. Таким образом, в таблице отсутствует информация о том, как на самом деле описано имя: как int или как long.









                Содержание раздела