Флаги в выводе objdump объектного файла
существует этот вывод objdump в некотором объектном файле:
$ objdump -h main.o
main.o:     file format elf32-i386
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000000b  00000000  00000000  00000034  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00000000  00000000  00000040  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00000000  00000000  00000040  2**2
                  ALLOC
  3 .note.GNU-stack 00000000  00000000  00000000  00000040  2**0
                  CONTENTS, READONLY, CODE
что означают эти флаги CONTENTS, ALLOC, LOAD и так далее?
2 ответов
то, что вы видите, - это интерпретация комбинации флагов сегментов ELF, типов разделов и флагов разделов для каждого раздела в объектном файле.
- 
LOADозначает, что раздел находится в загружаемом сегменте, т. е. его содержимое может быть прочитано из файла в память при создании процесса
флаги раздела хорошо документированы в  Глава 4 двоичного интерфейса приложения System V, хотя и немного разные имена от чего objdump показывает.
- 
CODEозначает, что раздел содержит исполняемый код; оно обозначаетсяSHF_EXECINSTRфлаг в заголовке раздела
- 
DATAозначает, что раздел не является исполняемым, но доступен для записи, о чем свидетельствует наличиеSHF_WRITEфлаг
- 
READONLYозначает, что раздел не является ни исполняемым, ни записываемым и должен быть помещен в страницы памяти только для чтения
- 
ALLOCозначает, что раздел занимает память, например, страницы памяти, выделенной для хранения содержимого раздела при создании процесса, указываетSHF_ALLOCфлаг. Некоторые разделы, например, содержащие отладочную информацию, не считываются в память при обычном выполнении программы и не помечаются какALLOCсохранить память.
разделы типа SHT_PROGBITS имеют соответствующее содержимое в файле и отображаются как CONTENTS. Некоторые разделы не имеют соответствующего содержимого в файл, например, типа SHT_NOBITS.
на .text раздел содержит исполняемый код программы. Это показать как CONTENTS так как он имеет тип SHT_PROGBITS. Память должна быть зарезервирована для этого раздела, так как это ALLOC и его содержимое должно быть загружено из файла, так как оно помещено в LOAD-в состоянии сегмента. Программный код, как правило, не модифицируется, и поэтому раздел помещается в память только для чтения. Он содержит инструкции, которые должны быть выполнены и отсюда CODE флаг.
инициализации переменные со статическим классом хранения переходят в . Их начальные значения сохраняются в файле и считываются оттуда по мере создания процесса. В C / C++ это глобальные переменные, статические локальные переменные и статические переменные-члены C++, которые инициализируются соответствующим образом, например static int a = 10;. Fortran места инициализированы SAVE-д переменные и COMMON блоков, которые даны значения intiial с блока DATA заявление есть.
на  (историческое название, аббревиатура от блок запускается символом) является самым простым. Он держит неинициализированное переменные со статическим классом памяти. Это раздел типа SHT_NOBITS и не занимает места в файле. Памяти ALLOC - ated для него, но ничего не читается из файла, чтобы заполнить память-он просто остается все нули, как доставляется распределителем памяти ядра.
константы обычно заходите в .rodata раздел (нет в вашем примере), который выглядит как .data но не помечен как доступный для записи и, таким образом, отражается как READONLY.
найдены фрагменты информации о Ubuntu elf man page и это только мое понимание.
Я думаю, что они являются информацией от обоих program header и section header. 
LOAD: may correspond to PT_LOAD in the Program header table. Brief description:
It specifies the type of that particular element in the program header table.
The array element specifies a loadable segment
ALLOC: may correspond to SHF_ALLOC in the section table. Brief description:
Its specifies the flag of that particular element in the section header.
This  section  occupies  memory during process execution.
CODE/ DATA: indicates the belonging segment
READONLY: specifies a read-only segment
CONTENTS: I didn't find anything to conclude.
надеюсь, что это помогает
