mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

SYMS(4)                                                 SYMS(4)

НАЗВАНИЕ 
        syms - формат таблицы имен в обычном объектном файле

СИНТАКСИС 
        #include 

ОПИСАНИЕ 
        Объектные файлы обычного  формата  содержат  информацию
        для  поддержки, отладки в терминах исходного языка [см.
        sdb(1)]. Информация о номерах строк [см. linenum(4)]  и
        об именах, встречающихся в программе, позволяет отлажи-
        вать  программу  на  уровне  исходного 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]

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

        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), linenum(4).
        sdb(1) в Справочнике пользователя.

ПРЕДОСТЕРЕЖЕНИЯ 
        На  компьютерах,  у  которых  тип int эквивалентен типу
        long, вместо long в таблице имен указывается int. Таким
        образом, в таблице отсутствует информация о том, как на
        самом деле описано имя: как int или как long.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк