为什么用Dev C++编译后的PE文件里多了这么多段?
Why so many additional sections in the PE file after compiling by Dev C++?
我用C/C++写了一些简单的代码,在win10上用Dev C++(MinGW)编译成PE格式。
我用工具"Stud PE"查看编译后的exe的PE文件结构如下:
如您所见,除了 .text ,.data , .bss ... 等普通文件部分外,还有一些其他部分的名称如 /4,/19,/31 ... .
我怎么知道这些部分的用途是什么? 用于调试?? (但为什么这么多节的名字很奇怪?)
是否有任何文档或 material 来解释这些部分的用途,以及如何在 Dev C++ 中关闭生成这些部分?
谢谢~
在 PE executables 中,/[n] 形式的部分名称引用偏移量 [n] 到 COFF 字符串 table 中作为它们的名称。
您可以使用 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
我用C/C++写了一些简单的代码,在win10上用Dev C++(MinGW)编译成PE格式。
我用工具"Stud PE"查看编译后的exe的PE文件结构如下:
如您所见,除了 .text ,.data , .bss ... 等普通文件部分外,还有一些其他部分的名称如 /4,/19,/31 ... .
我怎么知道这些部分的用途是什么? 用于调试?? (但为什么这么多节的名字很奇怪?)
是否有任何文档或 material 来解释这些部分的用途,以及如何在 Dev C++ 中关闭生成这些部分?
谢谢~
在 PE executables 中,/[n] 形式的部分名称引用偏移量 [n] 到 COFF 字符串 table 中作为它们的名称。
您可以使用 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