[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Разделы

Таблица заголовков разделов объектного файла позволяет быстро находить разделы файла. Таблица заголовков разделов - это массив структур Elf32_Shdr или Elf64_Shdr. Таблица заголовков разделов проиндексирована. Смещение таблицы от начала файла указано в элементе e_shoff заголовка ELF. В элементе e_shnum указано число записей таблицы заголовков разделов. В e_shentsize указан размер каждой записи.

Если число разделов больше либо равно SHN_LORESERVE (0xff00), то e_shnum присваивается значение SHN_UNDEF (0), а действительное значение количества разделов таблицы хранится в поле sh_size заголовка раздела по индексу 0 (в противном случае, элемент sh_size начальной записи содержит 0).

Если размер индекса ограничен, то некоторые индексы таблицы разделов могут быть зарезервированы, например, элемент st_shndx записи таблицы имен, также элементы e_shnum и e_shstrndx заголовка ELF. В таких случаях зарезервированные значения не указывают на действительные разделы объектного файла. Кроме того, в подобных случаях особое значение указывает, что действительный индекс раздела хранится в другом месте в поле большего размера.

Особые индексы разделов

Имя Значение
SHN_UNDEF 0
SHN_LORESERVE 0xff00
SHN_LOPROC 0xff00
SHN_HIPROC 0xff1f
SHN_LOOS 0xff20
SHN_HIOS 0xff3f
SHN_ABS 0xfff1
SHN_COMMON 0xfff2
SHN_HIRESERVE 0xffff

SHN_UNDEF
Эти значением помечается ссылка на раздел, которая не определена, отсутствует, неверная или лишена смысла по любой другой причине. Например, имя ссылки на номер раздела SHN_UNDEF - это неопределенное имя.

Примечание: Хотя индекс 0 зарезервирован для неопределенного значения, в таблице заголовков разделов есть запись с индексом 0. Если в элементе e_shnum заголовка ELF указано, что в таблице заголовков разделов есть 6 записей, то эти записи имеют индексы от 0 до 5. Содержимое начальной записи описано в этом разделе ниже.

SHN_LORESERVE
Это значение указывает нижнюю границу диапазона зарезервированных индексов.

SHN_LOPROC - SHN_HIPROC
Значения в этом диапазоне зависят от типа процессора.

SHN_LOOS - SHN_HIOS
Значения в этом диапазоне зависят от типа применяемой операционной системы.

SHN_ABS
Это значение задает абсолютные значения соответствующих ссылок. Например, у имен, связанных с номером раздела SHN_ABS, есть абсолютные значения, и они не будут затрагиваться при перемещении.

SHN_COMMON
Имена, связанные с этим разделом, являются общими, например, имена FORTRAN COMMON или неразмещенные внешние переменные языка С.

SHN_HIRESERVE
Это значение указывает верхнюю границу диапазона зарезервированных индексов. Система резервирует индексы между SHN_LORESERVE и SHN_HIRESERVE включительно; значения из этого диапазона не указывают на таблицу заголовков разделов. Таблица заголовков разделов не содержит записей для зарезервированных индексов.

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

Структура заголовка раздела показана ниже.

typedef struct {
		 Elf32_Word		 sh_name;
		 Elf32_Word		 sh_type;
		 Elf32_Word		 sh_flags;
		 Elf32_Addr		 sh_addr;
		 Elf32_Off		 sh_offset;
		 Elf32_Word		 sh_size;
		 Elf32_Word		 sh_link;
		 Elf32_Word		 sh_info;
		 Elf32_Word		 sh_addralign;
		 Elf32_Word		 sh_entsize;
} Elf32_Shdr;
 
typedef struct {
		 Elf64_Word		 sh_name;
		 Elf64_Word		 sh_type;
		 Elf64_Xword		 sh_flags;
		 Elf64_Addr		 sh_addr;
		 Elf64_Off		 sh_offset;
		 Elf64_Xword		 sh_size;
		 Elf64_Word		 sh_link;
		 Elf64_Word		 sh_info;
		 Elf64_Xword		 sh_addralign;
		 Elf64_Xword		 sh_entsize;
} Elf64_Shdr;

Заголовок раздела

sh_name
В этом элементе указано имя раздела. Это индекс в таблице заголовков разделов [см. Таблица строк], по которому указан адрес строки с именем раздела.

sh_type
Этот элемент указывает категорию содержимого раздела. Типы разделов и их описания приведены ниже.

sh_flags
Разделы поддерживают 1-разрядные флаги, задающие различные атрибуты. Определения флагов приведены ниже.

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

sh_offset
Значение этого элемента задает смещение от начала файла, по которому находится первый байт раздела. Раздел типа SHT_NOBITS, описанный ниже, не занимает места в файле, и его элемент sh_offset указывает возможное положение в файле.

sh_size
В этом элементе указан размер раздела в байтах. Если тип размера не равен SHT_NOBITS, раздел занимает sh_size байт в файле. Раздел типа SHT_NOBITS может иметь ненулевой размер, но он не занимает места в файле.

sh_link
В этом элементе хранится ссылка на индекс таблицы заголовков разделов; его интерпретация зависит от типа раздела. Значения описаны в следующей таблице.

sh_info
В этом элементе хранится дополнительная информация; его интерпретация зависит от типа раздела. Значения описаны в следующей таблице. Если в поле sh_flags этого заголовка раздела указан атрибут SHF_INFO_LINK, то элемент представляет индекс таблицы заголовков разделов.

sh_addralign
Для некоторых разделов определены правила выравнивания. Например, если в разделе хранится двойное слово, то весь раздел должен быть выровнен по границе двойного слова. Значение sh_addr должно быть кратно значению sh_addralign. В данный момент поддерживается значение 0 и положительные степени 2. Значения 0 и 1 указывают, что правил выравнивания для данного раздела не существует.

sh_entsize
В некоторых разделах находится таблица записей одинакового размера, например, таблица имен. Для таких разделов в данном элементе указан размер каждой записи. Если раздел не содержит таблицу записей одинакового размера, то в этом элементе указано значение 0.

Элемент sh_type заголовка раздела указывает тип раздела.

Типы разделов, sh_type

Имя Значение
SHT_NULL 0
SHT_PROGBITS 1
SHT_SYMTAB 2
SHT_STRTAB 3
SHT_RELA 4
SHT_HASH 5
SHT_DYNAMIC 6
SHT_NOTE 7
SHT_NOBITS 8
SHT_REL 9
SHT_SHLIB 10
SHT_DYNSYM 11
SHT_INIT_ARRAY 14
SHT_FINI_ARRAY 15
SHT_PREINIT_ARRAY 16
SHT_LOOS 0x60000000
SHT_HIOS 0x6fffffff
SHT_LOPROC 0x70000000
SHT_HIPROC 0x7fffffff
SHT_LOUSER 0x80000000
SHT_HIUSER 0xffffffff

SHT_NULL
Это значение помечает заголовок раздела как неактивный; ему не соответствует раздел. Другие элементы такого заголовка раздела не определены.

SHT_PROGBITS
В этом разделе хранится информация, определенная программой. Формат информации также определяется программой.

SHT_SYMTAB и SHT_DYNSYM
В этих разделах хранится таблица имен. В данный момент в объектном файле может быть только один раздел каждого из этих типов, однако в будущем это ограничение может быть снято. Обычно SHT_SYMTAB содержит имена для статической компоновки, хотя они могут применяться и для динамической. Многие имена из таблицы имен могут не применяться при динамической компоновке. В целях экономии памяти в объектном файле иногда создается раздел SHT_DYNSYM, содержащий минимальный набор имен для динамической компоновки. Более подробная информация приведена в разделе Таблица имен.

SHT_STRTAB
В разделе хранится таблица строк. В объектном файле может быть несколько разделов с таблицами строк. Более подробная информация приведена в разделе Таблица строк.

SHT_RELA
В этом разделе хранятся таблицы перемещения с явными дополнениями, например, типов Elf32_Rela для 32-разрядного класса объектных файлов и Elf64_Rela для 64-разрядного. В объектном файле может быть несколько разделов с таблицами перемещения. Более подробная информация приведена в разделе Перемещение.

SHT_HASH
В этом разделе хранится хэш-таблица имен. В данный момент в объектном файле может быть только один раздел с хэш-таблицей, однако в будущем это ограничение может быть снято. Более подробная информация приведена разделе Хэш-таблица в Главе 32.

SHT_DYNAMIC
В этом разделе хранится информация для динамической компоновки. В данный момент в объектном файле может быть только один такой раздел, однако в будущем это ограничение может быть снято. Более подробная информация приведена в разделе Динамический раздел в главе 32.

SHT_NOTE
В этом разделе хранится информация, описывающая некоторым образом файл. Более подробная информация приведена в разделе Раздел примечаний главы 32.

SHT_NOBITS
Раздел этого типа не занимает места в файле, но похож на SHT_PROGBITS. Хотя в этом разделе нет ни одного байта, в элементе sh_offset указано его возможно смещение в файле.

SHT_REL
В этом разделе хранятся записи перемещения без явных дополнений, например, типов Elf32_Rel для 32-разрядных классов файлов и Elf64_Rel для 64-разрядных. В объектном файле может быть несколько разделов с таблицами перемещения. Более подробная информация приведена в разделе Перемещение.

SHT_SHLIB
Этот тип раздела зарезервирован, но его значение не определено.

SHT_INIT_ARRAY
В этом разделе хранится массив указателей на функции инициализации, описанные в разделе Функции инициализации и завершения главы 32. Каждый элемент массива указывает на процедуру без параметров, не возвращающую значений.

SHT_FINI_ARRAY
В этом разделе хранится массив указателей на функции завершения, описанные в разделе Функции инициализации и завершения главы 32. Каждый элемент массива указывает на процедуру без параметров, не возвращающую значений.

SHT_PREINIT_ARRAY
В этом разделе хранится массив указателей на функции, которые вызываются перед функциями инициализации. Эти функции описаны в разделе Функции инициализации и завершения главы 32. Каждый элемент массива указывает на процедуру без параметров, не возвращающую значений.

SHT_LOOS - SHT_HIOS
Значения в этом диапазоне зависят от типа применяемой операционной системы.

SHT_LOPROC - SHT_HIPROC
Значения в этом диапазоне зависят от типа процессора.

SHT_LOUSER
Это значение указывает нижнюю границу диапазона индексов, зарезервированных для прикладных программ.

SHT_HIUSER
Это значение указывает верхнюю границу диапазона индексов, зарезервированных для прикладных программ. Типы разделов, находящиеся в диапазоне SHT_LOUSER - SHT_HIUSER, могут применяться прикладными программами без риска возникновения конфликтов с текущими или будущими системными типами.

Все остальные значения зарезервированы. Как было отмечено ранее, заголовок раздела с индексом 0 (SHN_UNDEF), существует, хотя его индекс и указывает на неопределенный сегмент. В этой записи хранится следующая информация.

Запись таблицы заголовков разделов:Индекс 0

Имя Значение Примечание
sh_name 0 Нет имени
sh_type SHT_NULL Неактивный
sh_flags 0 Нет флагов
sh_addr 0 Нет адреса
sh_offset 0 Нет смещения
sh_size Нет Если не равен нулю, то указывает число записей заголовка раздела
sh_link Нет Если не равен нулю, то указывает индекс таблицы строк в заголовке раздела
sh_info 0 Нет вспомогательной информации
sh_addralign 0 Нет выравнивания
sh_entsize 0 Нет записей

Элемент sh_flags заголовка раздела содержит 1-разрядные флаги, задающие атрибуты раздела. Определенные значения показаны в следующей таблице, все прочие значения зарезервированы.

Флаги атрибутов раздела

Имя Значение
SHF_WRITE 0x1
SHF_ALLOC 0x2
SHF_EXECINSTR 0x4
SHF_MERGE 0x10
SHF_STRINGS 0x20
SHF_INFO_LINK 0x40
SHF_LINK_ORDER 0x80
SHF_OS_NONCONFORMING 0x100
SHF_GROUP 0x200
SHF_MASKOS 0x0ff00000
SHF_MASKPROC 0xf0000000

Если бит флага в sh_flags равен 1, то установлен соответствующий атрибут для этого раздела. В противном случае, атрибут не установлен. Неопределенные атрибуты равны 0.

SHF_WRITE
Раздел содержит данные, которые должны быть доступны для записи во время выполнения процесса.

SHF_ALLOC
Этот раздел занимает память во время выполнения процесса. Некоторые управляющие разделы не хранятся в образе объектного файла в памяти; для таких разделов этот бит выключен.

SHF_EXECINSTR
Раздел содержит исполняемый код.

SHF_MERGE
Данные в разделах можно объединять, чтобы избежать их дублирования. Если не задан флаг SHF_STRINGS, элементы данных в этом разделе имеют одинаковый размер. Размер каждого элемента задается полем sh_entsize заголовка раздела. Если задан флаг SHF_STRINGS, то элемент данных состоит из символьных строк, завершающихся пустым символом. Размер каждого символа задан в поле sh_entsize заголовка раздела.

Каждый элемент раздела сравнивается с другими элементами с тем же именем, типом и флагами. Элементы с одинаковыми значениями объединяются в один. Элементы перемещения для таких разделов должны преобразовываться в объединенное значение. Учтите, что перемещаемые элементы, включая элементы, перемещаемые во время выполнения, должны отдельно анализироваться, чтобы выяснить, будут ли совпадать действительные значения, вычисленные во время выполнения. Совместимый с ABI объектный файл не должен зависеть от того, были ли объединены элементы, поэтому совместимый с ABI компоновщик может решить, что некоторые элементы объединять не следует.

SHF_STRINGS
Элементы данных в этом разделе состоят из символьных строк, завершающихся пустым символом. Размер каждого символа задан в поле sh_entsize заголовка раздела.

SHF_INFO_LINK
В поле sh_info этого заголовка раздела хранится индекс таблицы заголовков разделов.

SHF_LINK_ORDER
Этот флаг устанавливает для компоновщика дополнительные условия, касающиеся порядка следования элементов. Эти условия применяются в том случае, если поле sh_link этого заголовка раздела ссылается на другой раздел. Если этот раздел объединяется в выходном файле с другими разделами, то он должен находиться относительно этих разделов в том же положении, в котором по отношению к ним находится раздел, на который ссылается данный.

Примечание: Обычно этот флаг применяется при создании таблицы, ссылающейся на разделы текста или данных в порядке их следования в памяти.

SHF_OS_NONCONFORMING
Для правильного применения этого раздела помимо стандартных правил компоновки (Правила компоновки нераспознанных разделов) необходимы дополнительные действия со стороны операционной системы. Если для этого раздела задано значение sh_type или биты sh_flags из диапазона операционной системы, а обрабатывающий этот раздел компоновщик не распознал эти значения, то объектный файл, содержащий этот раздел, должен быть отклонен. При этом отправляется сообщение об ошибке.

SHF_MASKOS
Все биты в этой маске зарезервированы для конкретной операционной системы.

SHF_MASKPROC
Все биты в этой маске зарезервированы для конкретного процессора. Их применение описано в документации по процессору.

Элементы заголовка раздела sh_link и sh_info содержат дополнительную информацию, зависящую от типа раздела.

Интерпретация sh_link иsh_info

sh_type sh_link sh_info
SHT_DYNAMIC Индекс таблицы строк, применяемой записями из этого раздела. 0
SHT_HASH Индекс таблицы имен, к которой относится хэш-таблица. 0
SHT_REL
SHT_RELA
Индекс таблицы имен в заголовке раздела. Индекс раздела, к которому применяется перемещение.
SHT_SYMTAB
SHT_DYNSYM
Индекс таблицы строк в заголовке раздела. На единицу превышает индекс последнего локального (STB_LOCAL)имени в таблице имен.
SHT_GROUP Индекс таблицы имен в заголовке раздела. Индекс записи в связанной таблице имен. Имя из указанной записи таблицы имен содержит название группы разделов.
SHT_SYMTAB_SHNDX Индекс раздела таблицы имен в заголовке раздела. 0

Правила компоновки нераспознанных разделов

Когда компоновщик встречает раздел, заголовок которого содержит неизвестные компоновщику значения sh_type или sh_flags, этот раздел компонуется следующим образом.

Если флаги sh_flags раздела содержат атрибут SHF_OS_NONCONFORMING, то для его обработки необходима дополнительная информация, и компоновщик должен отклонить такой объект и отправить сообщение об ошибке.

Нераспознанные разделы без атрибута SHF_OS_NONCONFORMING компонуются в два этапа. Компоновщик должен учесть требования к выравниванию (заданные полем sh_addralign) и, путем заполнения байтов между разделами нулями, создать объект, удовлетворяющий самому строгому требованию среди входных разделов.

  1. На первом этапе объединяются разделы, у которых совпадают имена, типы и атрибуты. Порядок объединения должен удовлетворять всем известным требованиям, заданным атрибутами входных разделов (например, SHF_MERGE и SHF_LINK_ORDER). Если не указано иное, разделы объединяются в порядке следования.
  2. На втором этапе разделы присваиваются сегментам или другим единицам памяти, в зависимости от атрибутов. Все разделы неизвестных типов объединяются в один сегмент, причем внутри сегмента разделы одного типа должны располагаться по-возможности рядом.

Для разделов неизвестных типов должны быть выполнены все действия, не зависящие от операционной системы (например, перемещение). Таблица заголовков выходного раздела, если она есть, должна содержать записи для всех неизвестных разделов. Все флаги атрибутов нераспознанных разделов удаляются.

Примечание: Компоновщикам рекомендуется придерживаться этой последовательности и при работе с разделами известных типов. Если это необходимо, свободная память между разделами может заполняться символами, отличными от 0.

Группы разделов

Некоторые разделы объединяются в группы. Например, для внешнего определения встроенной функции, помимо раздела с исполняемым кодом, может потребоваться раздел, содержащий список литералов, несколько отладочных и других информационных разделов. Более того, некоторые внутренние ссылки таких разделов могут потерять смысл после удаления одного из разделов или замены его копией из другого объекта. Следовательно, такие группы необходимо включать и исключать из объектного файла единым блоком.

Группы разделов определяются с помощью раздела типа SHT_GROUP. Названием группы разделов становится имя, заданное в таблице имен одного из разделов, входящих в группу. Запись таблицы имен определяется заголовком раздела SHT_GROUP; в элементе sh_link хранится индекс раздела с таблицей имен, в которой хранится запись. Индекс самой записи таблицы имен хранится в элементе sh_info. Элемент sh_flags заголовка раздела содержит значение 0. Имя раздела (sh_name) не указывается.

В разделе SHT_GROUP хранится массив записей Elf32_Word. Первая запись - это флаг. Остальные записи - это последовательность индексов заголовков разделов.

На данный момент определены следующие флаги:

Флаги группы разделов

Имя Значение
GRP_COMDAT 0x1

GRP_COMDAT
Это группа COMDAT. Ее название может совпадать с названием другой группы COMDAT в другом объектном файле. В этом случае компоновщик обработает только одну группу, а элементы другой группы будут отклонены.

Индексы заголовков разделов в SHT_GROUP указывают на разделы, из которых состоит группа. В элементе sh_flags каждой из этих групп должен быть задан флаг SHF_GROUP. Если компоновщику потребуется удалить группу разделов, он удаляет все входящие в группу разделы.

Примечание: Это требование не относится к случаю удаления отладочной информации. При удалении такой информации сегмент, для которого выполняется отладка, не удаляется вместе с отладочным сегментом, даже если они относятся к одной группе.

Для того чтобы группу можно было удалить, не затрагивая таблицы имен и не нарушая установленные ссылки, должны соблюдаться следующие правила:

Специальные разделы

Некоторые разделы содержат управляющую и программную информацию.

Ниже перечислены типы и атрибуты таких разделов.

Специальные разделы

Имя Тип Атрибуты
.bss SHT_NOBITS SHF_ALLOC+SHF_WRITE
.comment SHT_PROGBITS нет
.data SHT_PROGBITS SHF_ALLOC+SHF_WRITE
.data1 SHT_PROGBITS SHF_ALLOC+SHF_WRITE
.debug SHT_PROGBITS нет
.dynamic SHT_DYNAMIC см. ниже
.dynstr SHT_STRTAB SHF_ALLOC
.dynsym SHT_DYNSYM SHF_ALLOC
.fini SHT_PROGBITS SHF_ALLOC+SHF_EXECINSTR
.fini_array SHT_FINI_ARRAY SHF_ALLOC+SHF_WRITE
.got SHT_PROGBITS см. ниже
.hash SHT_HASH SHF_ALLOC
.init SHT_PROGBITS SHF_ALLOC+SHF_EXECINSTR
.init_array SHT_INIT_ARRAY SHF_ALLOC+SHF_WRITE
.interp SHT_PROGBITS см. ниже
.line SHT_PROGBITS нет
.note SHT_NOTE нет
.plt SHT_PROGBITS см. ниже
.preinit_array SHT_PREINIT_ARRAY SHF_ALLOC+SHF_WRITE
.relимя SHT_REL см. ниже
.relaимя SHT_RELA см. ниже
.rodata SHT_PROGBITS SHF_ALLOC
.rodata1 SHT_PROGBITS SHF_ALLOC
.shstrtab SHT_STRTAB нет
.strtab SHT_STRTAB см. ниже
.symtab SHT_SYMTAB см. ниже
.text SHT_PROGBITS SHF_ALLOC+SHF_EXECINSTR

.bss
В этом разделе хранятся неинициализированные данные, относящиеся к образу памяти в программе. По определению, система инициализирует данные нулями при запуске программы. Как следует из типа раздела (SHT_NOBITS), он не занимает места в памяти.

.comment
В этом разделе хранится информация о версии.

.data и .data1
В этом разделе хранятся инициализированные данные, относящиеся к образу памяти в программе.

.debug
В этом разделе хранится информация для отладки имен. Формат его содержимого не определен. Все разделы с именами, начинающимися с .debug, зарезервированы в ABI для использования в будущем.

.dynamic
В этом разделе хранится информация о динамической компоновке. Атрибуты раздела содержат бит SHF_ALLOC. Значение бита SHF_WRITE зависит от процессора. Более подробная информация приведена в главе 32.

.dynstr
В этом разделе хранится информация, применяемая при динамической компоновке. Чаще всего это имена, связанные с записями таблицы имен. Более подробная информация приведена в главе 32.

.dynsym
В этом разделе хранится таблица имен для динамической компоновки (см. раздел Таблица имен.) Более подробная информация приведена в главе 32.

.fini
В этом разделе хранятся исполняемые инструкции, относящиеся к функциям завершения процесса. При нормальном завершении программы система выполняет инструкции из этого раздела.

.fini_array
В этом разделе хранится массив указателей на функции завершения для исполняемых и общих объектов, содержащих раздел.

.got
В этом разделе хранится глобальная таблица смещения. Более подробная информация приведена в разделах "Примеры кода", "Специальные разделы" и "Глобальная таблица смещения" в главе 32.

.hash
В этом разделе хранится хэш-таблица имен. Более подробная информация приведена в разделе Хэш-таблица в главе 32.

.init
В этом разделе хранятся исполняемые инструкции, относящиеся к функциям инициализации процесса. При запуске программы система выполняет инструкции из этого раздела перед передачей управления главной точке входа программы (называемой в языке С функцией main).

.init_array
В этом разделе хранится массив указателей на функции инициализации для исполняемых и общих объектов, содержащих раздел.

.interp
В этом разделе хранится путь к интерпретатору программы. Если в файле есть загружаемый сегмент, требующий перемещения, то атрибуты раздела будут содержать бит SHF_ALLOC. В противном случае, этот бит будет выключен. Более подробная информация приведена в главе 32.

.line
В этом разделе хранится отладочная информация о номере строки, устанавливающая соответствие между исходной программой и машинным кодом. Формат его содержимого не определен.

.note
В этом разделе хранится информация в формате, описанном в главе 32. См. раздел Раздел примечаний.

.plt
В этом разделе хранится таблица компоновки процедур. Более подробная информация приведена в разделах "Специальные разделы" и "Таблица компоновки процедур" в главе 32.

.preinit_array
В этом разделе хранится массив указателей на функции предварительной инициализации для исполняемых и общих объектов, содержащих раздел.

.relимя и .relaимя
В этих разделах хранится информация о перемещении, описанная в разделе Перемещение. Если в файле есть загружаемый сегмент, требующий перемещения, то атрибуты раздела будут содержать бит SHF_ALLOC. В противном случае, этот бит будет выключен. Значение имени определяется разделом, в котором выполняется перемещение. Таким образом, разделу перемещения для .text обычно присваивается имя .rel.text или .rela.text.

.rodata и .rodata1
В этих разделах хранятся предназначенные только для чтения данные, относящиеся к защищенному от записи сегменту образа процесса. Более подробная информация приведена в разделе Заголовок программы в главе 32.

.shstrtab
В этом разделе хранятся имена разделов.

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

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

.text
В этом разделе хранится текст (исполняемые инструкции) программы.

Имена разделов, начинающиеся с точки (.), зарезервированы системой, однако приложения могут при необходимости пользоваться этими разделами. Для того чтобы избежать конфликтов с системными разделами, в приложениях рекомендуется использовать имена, не начинающиеся с точки. Формат объектного файла позволяет определять разделы, не показанные в предыдущем списке. В объектном файле может быть несколько разделов с одинаковыми именами.

Имена разделов, зарезервированные для конкретной процессорной архитектуры, создаются путем добавления к имени раздела префикса, соответствующего заданной архитектуре. Названия архитектур должны совпадать с названиями, определенными для e_machine. Например, .FOO.psect - это раздел psect, определенный для архитектуры FOO.

Названия существующих расширений сложились исторически.

Табл. 32-1.

Стандартные расширения
.sdata .tdesc
.sbss .lit4
.lit8 .reginfo
.gptab .liblist
.conflict

Примечание: Более подробная информация о разделах, зависящих от конкретного процессора, приведена в документации ABI по процессору.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]