【问题标题】:Why so many additional sections in the PE file after compiling by Dev C++?为什么用 Dev C++ 编译后 PE 文件中有这么多附加部分?
【发布时间】:2017-01-25 09:23:12
【问题描述】:

我用C/C++写了一些简单的代码,在win10上用Dev C++(MinGW)编译成PE格式。

我用“Stud PE”工具查看了编译后的exe的PE文件结构如下:

如您所见,除了 .text 、.data 、 .bss ... 等普通文件部分之外,还有一些其他名称为 /4、/19、/31 ... 的部分。

我如何知道这些部分的用途是什么? 用于调试? (但为什么有这么多名字奇怪的部分?)

是否有任何文档或材料来解释这些部分的目的,以及如何关闭在 Dev C++ 中生成这些部分?

谢谢~

【问题讨论】:

  • 您是否尝试过反汇编并检查这些部分中的内容?
  • 嗨,还没有,也许我以后可以做,但我只是对x86 asm和ollydbg有一些经验,我不是很熟悉。在深入探讨之前,我只想快速简短地回答一下。
  • 其中许多部分是不可执行的(只是可读的),所以我认为它只是数据而不是要执行的代码。

标签: c++ dev-c++ portable-executable


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    相关资源
    最近更新 更多