Почему так много дополнительных разделов в PE-файле после компиляции Dev C++?

Я написал некоторый простой код на C/C++, компилируя с помощью Dev C++(MinGW) в формате PE на win10 .

Я использовал инструмент "Stud PE", чтобы просмотреть структуру PE-файлов скомпилированного exe следующим образом:

Как видите, в дополнение к обычным разделам файла, таким как.text,.data, .bss ..., есть и другие разделы с именем, например /4,/19,/31 ... .

Как я могу узнать, какова цель этих разделов? для отладки?? (но почему так много разделов со странным названием?)

Есть ли какая-либо документация или материал, объясняющий назначение этих разделов, и как я могу отключить создание этих разделов в Dev C++?

Спасибо ~

1 ответ

Решение

В исполняемых файлах PE имена разделов формы /[n] ссылки смещаются [n] в таблицу строк COFF для их имен.

Вы можете использовать gnu binutils' objdump -h, чтобы увидеть настоящие имена этих разделов.

Как правило, разделы с длинными именами - это разделы, добавленные gcc или clang для отладочной информации DWARF, а также.eh_frame, в котором хранится информация о размотке для каждой функции.

Ни в одном из этих разделов нет кода, но их форматы задокументированы (хотя DWARF читать нетривиально).

Ваш вывод, вероятно, будет что-то вроде этого:

/Users/arty/dev/reactos/emacs-24.5/bin/addpm.exe:     file format pei-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000017b0  00401000  00401000  00000600  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
  1 .data         00000010  00403000  00403000  00001e00  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .rdata        00000b80  00404000  00404000  00002000  2**5
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .eh_frame     00000150  00405000  00405000  00002c00  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .bss          00000078  00406000  00406000  00000000  2**2
                  ALLOC
  5 .idata        000006f8  00407000  00407000  00002e00  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  6 .CRT          00000018  00408000  00408000  00003600  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  7 .tls          00000020  00409000  00409000  00003800  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  8 .debug_aranges 00000108  0040a000  0040a000  00003a00  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_pubnames 00000388  0040b000  0040b000  00003c00  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_pubtypes 00000469  0040c000  0040c000  00004000  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_info   00004ea5  0040d000  0040d000  00004600  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_abbrev 00000c0c  00412000  00412000  00009600  2**0
                  CONTENTS, READONLY, DEBUGGING
 13 .debug_line   00000be4  00413000  00413000  0000a400  2**0
                  CONTENTS, READONLY, DEBUGGING
 14 .debug_frame  000003c4  00414000  00414000  0000b000  2**2
                  CONTENTS, READONLY, DEBUGGING
 15 .debug_str    0000017e  00415000  00415000  0000b400  2**0
                  CONTENTS, READONLY, DEBUGGING
 16 .debug_loc    00001049  00416000  00416000  0000b600  2**0
                  CONTENTS, READONLY, DEBUGGING
 17 .debug_macro  0007c3c9  00418000  00418000  0000c800  2**0
                  CONTENTS, READONLY, DEBUGGING
 18 .debug_ranges 00000090  00495000  00495000  00088c00  2**0
                  CONTENTS, READONLY, DEBUGGING
Другие вопросы по тегам