为什么在PE文件,因此许多额外的部分由开发C ++编译后?(Why so many addition

2019-09-29 18:29发布

余由C / C ++编写了一些简单的代码,通过开发的C ++(MinGW的)在PE格式上win10编译。

我使用的工具“梭哈PE”审查编译的exe的PE文件结构如下:

正如你所看到的,除了像的.text,。数据正常的文件部分和.bss ......,有一个名为像/ 4/19/31其他一些部门,...。

我如何才能知道什么是这些部分的目的是什么? 进行调试? (但为什么有奇怪的名字这么多的部分?)

是否有任何文件或材料,以解释部分论文的目的,我怎么可以关闭生成开发的C ++这些板块?

谢谢〜

Answer 1:

在PE可执行文件,表格/ [n]的参考的段名偏移[n]的成用于他们的名字的COFF字符串表。

您可以使用GNU binutils的objdump的-H看到这些部分的真实姓名。

通常,长命名的部分是那些由GCC或铛添加矮调试信息,与.eh_frame一起,哪些商店放松对每个功能的信息。

有一个在任何这些部分的代码,但它们的格式文件(虽然侏儒平凡的阅读)。

您的输出可能是这样的:

/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


文章来源: Why so many additional sections in the PE file after compiling by Dev C++?