`

Microsoft PE/COFF文件格式

阅读更多

注意:本文中的大部分是阅读 《程序员的自我修养》 作 者:俞甲子,石凡,潘爱民 的读书笔记。推荐大家看看这本书。

一,微软采用的可执行文件/目标文件格式

微软采用的可执行文件格式是PE(Portable Executable),目标文件格式是COFF。

使用Visual C++编译产生的文件的代码段是.code,数据段是.data。PE中也允许程序员自定义段,例如在Visual C++中使用#pragma编译器指示:

#pragma data_seg("FOO")

int global=1;

#pragma data_seg(".data")

这样将global放于FOO段,之后又切换回来(到.data段)。

二,Visual C++环境

Visual C++的编译器是cl,链接器是link,可执行文件查看使用dumpbin。这些工具需要在命令行下运行。

安装完Visual C++(比如VS2005)后, 开始/程序/Micfosoft Visual Studio 2005/Visual Studio Tools/Visual Studio 2005 Command Prompt中即可使用这些工具。

cd 进入源代码目录。比如使用如下命令:

cl /c /Za SimpleSection.c

cl是Compilter的缩写,/c表示只编译不链接,否则cl会在编译后调用link链接器将obj文件与默认C运行库链接形成.exe文件。

MSDN中Microsoft Extensions to C and C++中有关于Visual C++对C/C++的专有拓展的描述,这些在ANSI C/C++标准中没有定义。/Za意思是禁用这些拓展,使得程序与标准C/C++兼容。使用/Za,编译器自动定义宏__STDC__,我们可以在程序中用以判断是否禁用微软的C/C++拓展。

查看:

dumpbin /ALL SimpleSection.obj>SimpleSection.txt

/ALL表示打印出目标文件所有信息,>重定向。使用/SUMMARY则只会打印段名和长度。

PE可执行文件很多时候被称作Image(映像)文件。COFF文件的结构如下:

文件头由映像头和段表组成。VC或者SDK中可以找到文件和段的数据结构的有关定义VC/PlatformSDK\include\WinNT.h。

三,两个ELF中没有的段

链接指示信息:

.drectve段。Directive段内容是编译器传递给链接器的指令。其flags是IMAGE_SCN_ALIGN_!BYTES、IMAGE_SCN_LNK_REMOVE、IMAGE_SCN_LNK_INFO的组合。表示对其为1字节、连接成映像文件时抛弃、该段是注释或其他信息。

dumpbin会对该段进行解析。比如可能有/DEFAULTLIB:'LIBCMT'表示链接时使用静态多线程C语言库。使用/Zi可以关闭默认C库的链接指令。

调试信息:

.debug$T表示类型相关

.debug$S表示符号相关

.debbug$P表示预编译头文件相关

等等。

四,符号表

与ELF大致相同(详细参考书籍),但是这里会对字符串常量自动产生符号,ELF则不会。这种字符串的符号是编译器自动给它赋予的名字,对外部不可见。

五,PE文件

比COFF多了几个结构。一是文件开始部分不是COFF文件头,而是DOS MZ可执行文件格式的文件头和桩代码(DOS MZ File Header and Stub),这个是为了兼容DOS用的,其中的e_lfanew指向IMAGE_NT_HEADERS在文件中的偏移,如果是0则表明是DOS程序;第二个是COFF中的IMAGE_FILE_HEADER拓展成了IMAGE_NT_HEADERS。IMAGE_NT_HEADERS是真正的PE文件头,包含原来的和PE拓展头部结构(PE Optional Header),PE拓展头部结构是DLL和可执行文件都必须的。

六,PE数据目录

Windows装载PE可执行文件时,需要很快找到加载所需的数据结构,比如导入/导出表、异常表、资源、重定位表,TLS等,这些都被保存到了称为“数据目录(DataDirectory)”的结构中,可以通过解析这个数据结构,知道导入/导出表、异常表、资源、重定位表,TLS等的入口、大小等信息。

分享到:
评论

相关推荐

    PEMaster(PE/COFF文件分析提取)

    这使得开发者可以学习其内部实现,对PE/COFF文件格式有更深入的理解,也可以根据需要自定义和扩展功能。 总结起来,PEMaster是一个强大的工具,它不仅提供了对PE、COFF、OBJ和LIB文件的深入洞察,还支持文件的分析...

    pecoff_v8.pdf

    综上所述,该文件"pecoff_v8.pdf"是一份技术规范文档,专门针对Windows操作系统中的PE和COFF文件格式进行了解释和说明,这对于开发Windows平台的工具和应用程序是至关重要的。通过了解和掌握这些格式,开发者能够更...

    pecoff.pdf

    PE/COFF文件格式是微软为Windows NT操作系统开发的一种可移植的执行文件格式规范,目前版本为V6.0。该格式不仅仅用于Windows NT,也广泛应用于Windows系列操作系统的可执行文件以及对象文件。 文件中包含的关键词...

    PE coff 文件格式文档

    ### PE COFF 文件格式知识点详解 #### 一、概述 **PE COFF**(Portable Executable and Common Object File Format)是微软开发的一种...以上是对PE COFF文件格式的详细介绍,希望能对读者理解这一文件格式有所帮助。

    PE和coff文件规范

    需要注意的是,尽管微软提供此文档以帮助开发者理解PE和COFF文件格式,但微软声明该文档并不保证是完整的规范,并且保留了在未通知的情况下修改文档的权利。此外,该文档也提供了对一些与文件格式相关的微软专利声明...

    pecoff_v8 pecoff pecoff pecoff

    《Microsoft Portable Executable and Common Object File Format Specification》(PECOFF)是Windows操作系统中用于执行(图像)文件和对象文件的标准格式。PE(Portable Executable)和COFF(Common Object File ...

    windows_PE_COFF_文件结构描述(英文最新版)

    PE与COFF文件格式是由Microsoft设计的一套标准,旨在为Windows平台提供统一的可执行文件和目标文件的结构规范。PE主要用于可执行文件(如.exe和.dll)的存储和执行,而COFF则用于编译器生成的对象文件。这两种格式的...

    微软PE文件规范中文版+英文版

    **微软PE文件规范中文版+英文版** PE(Portable Executable)文件格式是Microsoft Windows操作系统中用于可执行程序、动态链接库(DLL)和其他类型模块的标准格式。此规范详细定义了如何组织和编译代码,使其能在...

    Microsoft PECOFF规范v8中文版

    ### Microsoft PECOFF规范v8中文版:深入解析 #### 基本概念与概览 Microsoft PECOFF规范v8中文版详细介绍了Microsoft Windows操作系统家族下可执行文件(映像)和目标文件的结构。PE(Portable Executable)文件...

    pecoff_v93.docx

    PECOFF文件格式是Windows平台的核心组成部分,它包含了程序运行所需的所有信息,如代码、数据、资源和元数据。PE文件不仅包含可执行程序,还包括动态链接库(DLL)、驱动程序等。COFF文件格式则主要用于未链接的对象...

    微软PE可执行文件格式权威文档

    总而言之,微软PE可执行文件格式权威文档是Windows平台下重要的技术资源,它不仅提供了PE和COFF文件格式的详尽规范,还介绍了相关的开发工具和专利政策。开发者在遵循文档内容时,应考虑到文档可能会被微软在未来...

    pecoff_v8_chs.rar_windows 8

    《Microsoft Windows、DOS PE 文件格式规范8.0》是微软发布的一份关于可移植可执行(Portable Executable, PE)文件格式的重要文档,主要针对Windows 8操作系统。PE文件格式是Windows系统中用于存放可执行程序、动态...

    Microsoft可移植可执行文件和通用目标文件格式文件规范_V8.1

    总之,Microsoft可移植可执行文件和通用目标文件格式文件规范V8.1是一份详尽的技术文档,它不仅详细描述了PE和COFF文件的结构,还提供了关于如何使用这些文件的重要指导。对于那些希望在Windows平台上开发高质量软件...

    MSDN PE文件格式

    微软PE文件格式自诞生以来经历了多个版本的迭代,其中最新的版本为**Revision 8.3**,发布于2013年2月6日。该版本是对前一个版本(Revision 6.0)的重要更新,进一步完善了文件格式的细节,并增强了对新功能的支持。...

    PECOFF4J-开源

    PECOFF4J是一个专为Java开发者设计的开源库,其主要功能是处理和操作可移植可执行文件和通用目标文件格式(Portable Executable COFF Format,简称PE/COFF)。这种格式通常用于Windows操作系统中的可执行文件(EXE)...

    PE文件格式官方文档

    《PE文件格式官方文档》是Microsoft提供的一份关于Windows操作系统下可执行文件(Image)和对象文件(Object)结构的详细规范,版本为PECOFF_v8。这份文档详细阐述了Portable Executable(PE)和Common Object File ...

    详解详解windows的PE文件格式.zip_PE 文件格式_PE格式解析_windows PE

    Windows PE(Portable Executable)文件格式是Microsoft Windows操作系统中的可执行文件格式,用于存储编译后的程序代码、数据和元数据。PE文件是Windows平台的核心组成部分,包括.exe和.dll文件。以下是对PE文件...

Global site tag (gtag.js) - Google Analytics