Объектные файлы/исполняемые файлы: в чем разница между сегментом и разделом?

Меня смущает, есть ли разница между «сегментом» и «разделом» при обращении к объектным файлам/исполняемым файлам.

Согласно https://en.wikipedia.org/wiki/Object_file:

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

Однако позже в статье говорится о сегментах (например, сегменте кода, сегменте данных и т. д.).

Кроме того, в формате файла PE (.exe/.dll/.coff в Windows) эти различные части называются разделами (https://msdn.microsoft.com/en-us/library/windows/desktop/ms680547(v=vs.85).aspx).

Итак, мой вопрос: есть ли разница между ними или они практически синонимы?


person Dean Leitersdorf    schedule 08.04.2018    source источник
comment
[Формат файла PE] относится к этим различным частям как к сегментам - я думаю, вы могли написать сегменты, когда имели в виду разделы. Стандарт PE/COFF касается только секций.   -  person Erlend Graff    schedule 09.04.2018
comment
Да, мой плохой. Отредактировано.   -  person Dean Leitersdorf    schedule 10.04.2018


Ответы (1)


Терминология может зависеть от конкретного формата объектного файла, но, как правило, раздел представляет собой более детализированный «фрагмент» кода или данных, чем сегмент, в том смысле, что сегмент может состоять из нескольких разделов.

Например, PE/ Стандартный документ COFF не имеет концепции сегментов — только разделы, тогда как формат объекта ELF имеет оба. В случае ELF сегменты в объектном файле аналогичны тому, что известно как сегменты в контексте процессора или архитектуры набора команд, такой как x86, то есть сегмент представляет собой некоторый непрерывный раздел памяти с определенным набором права доступа к памяти (или аналогичные), связанные с ним. Типичными примерами являются исполняемые «сегменты кода» и неисполняемые «сегменты данных».

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

Если формат объектного файла имеет концепцию как сегментов, так и разделов, каждый раздел обычно полностью содержится в одном сегменте (по крайней мере, в случае с ELF).

person Erlend Graff    schedule 08.04.2018
comment
Интересно, а вы случайно не знаете, что там с PE? - person Dean Leitersdorf; 10.04.2018
comment
Поскольку в формате PE есть только разделы, все метаданные, необходимые как компоновщику, так и загрузчику, содержатся внутри разделов или связаны с ними. Для форматов объектных файлов, которые также имеют сегменты, таких как ELF, стоит отметить, что весь код/данные одинаковы - это просто формат объектного файла, который обеспечивает два разных представления. данных. Сегменты, как правило, не являются строго необходимыми, так как вся информация также доступна через вид сечения. Они больше связаны с удобством для грузчика. - person Erlend Graff; 10.04.2018