- 浏览: 13201 次
最新评论
Microsoft PE/COFF文件格式
2011年03月02日
注意:本文中的大部分是阅读 《程序员的自我修养》 作 者:俞甲子,石凡,潘爱民 的读书笔记。推荐大家看看这本书。
一,微软采用的可执行文件/目标文件格式
微软采用的可执行文件格式是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等的入口、大小等信息。
发表评论
-
【贪吃蛇―Java程序员写Android游戏】系列 3. 用J2ME实现Android的Snake Sample详解
2012-01-20 10:18 687【贪吃蛇―Java程序员写Android游戏】系列 3. 用J ... -
编译Boost 1.38
2012-01-20 10:18 802编译Boost 1.38 2010年10月28日 首先, ... -
Collection接口和Map接口的主要实现类
2012-01-20 10:18 732Collection接口和Map接口的 ... -
开始-java之路(1)
2012-01-20 10:17 841开始-java之路(1) 2011年02月17日 今天开 ... -
ARM经典100问
2012-01-19 15:19 701ARM经典100问 2011年03月13日 第1章 体系 ... -
电脑管理破解
2012-01-19 15:18 564电脑管理破解 2011年03月10日 1、单击“开始―― ... -
电脑知识
2012-01-19 15:18 558电脑知识 2010年06月23日 ... -
2010-11-17
2012-01-19 15:18 5952010-11-17 2010年11月17日 PC:个人 ... -
2003 系统常用的设置
2012-01-17 05:05 6432003 系统常用的设置 201 ... -
站点主机安全档案
2012-01-17 05:05 659站点主机安全档案 2011 ... -
计算机常用词汇(F)
2012-01-17 05:05 636计算机常用词汇(F) 2011年09月29日 Failu ... -
WINDOWS XP 桌面主题的安装制作
2012-01-17 05:05 956WINDOWS XP 桌面主题的安装制作 2011年04月1 ... -
Java体系结构对信息安全的支持
2012-01-17 05:05 654Java体系结构对信息安全的支持 2010年06月09日 ... -
组件介绍
2012-01-16 03:56 785组件介绍 2009年11月22日 ... -
简历3
2012-01-16 03:56 680简历3 2009年11月09日 简[/b][b]历[/b ... -
JAVA基础加强(一)
2012-01-16 03:56 625JAVA基础加强(一) 2011年04月04日 2011 ... -
有关SVN的一些麻烦
2012-01-16 03:56 1183有关SVN的一些麻烦 2011年02月28日 前段时间整 ...
相关推荐
微软官方的有关PE COFF的文档,微软官方的有关PE COFF的文档
微软的PE-COFF文件格式第8版官方文档 SmartTech翻译
coff 是目前流行的目标文件格式,想研究的可以参考该头文件了解其...coff 很像PE 文件格式,它的file_header, section_header, reloc, sysbol 与PE 如出一辙,哦,正是出于一辙,前者是link 的输入,后者是link的输出。
Microsoft可移植可执行文件和通用目标文件格式文件规范 修订版8.1 - 2008 年2 月... http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx SmartTech译 电子信箱:zhzhtst@163.com fff
Microsoft PECOFF规范v8和v8.1中文版,研究PE文件的朋友必看
可移植可执行文件和通用对象文件格式规范(Portable Executable and Common Object File Format Specification)。希望了解exe/dll文件的内部组织构造的可以看一下。资源来自于微软的官方文档,说明较为详尽。
Windows 主要的可执行文件格式,的详细协议规范,对于 Windows PE 是怎么组织成文件的有具体的描述
这种文件格式是由微软设计的,并于1993年被TIS(tool interface standard,工具接口标准)委员会(由Microsoft,Intel,Borland,Watcom,IBM,等等组成)所批准,它明显的基于COFF文件格式的许多知识。COFF(“common ...
PE文件格式系列译文之一 原著:Bernd.Luevelsmeyer 翻译:ah007 [注意:本译文的所有大小标题序号都是译者添加,以方便大家...圆圈内的数字是注释的编号,其中注释②译自微软的《PECOFF规范》,其它译自网络。----译者]
pecoff文档\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\学习pe的好资料\\\
它是微软在UNIX平台的COFF(通用对象文件格式)基础上制作而成。最初设计用来提高程序在不同操作系统上的移植性,但实际上这种文件格式仅用在Windows系列操作系统下。 PE文件是指32位可执行文件,也称为PE32。64位...
Microsoft Portable Executable and Common Object File Format Specification
Microsoft 可移植可执行文件和通用目标文件格式文件规范 中文版
Microsoft Windows、DOS PE 文件格式规范8.0
PECOFF_v8_chs + Microsoft_Portable_Executable_and_Object_File_Format_Specification + PE文件格式(内容详细).ppt
OllyDbg 可以扫描Object文件/库(包括 OMF 和 COFF 格式),解压代码段[code segments]并且对其位置进行定向。 Implib扫描。 由于一些DLL文件的输出函数使用的索引号,对于人来说,这些索引号没有实际含义。如果...
静态编译后的易语言可执行程序(exe)和动态链接库(dll),运行时不再依赖任何支持库文件,文件尺寸更小(相对以前的独立编译),PE结构更合理(取消了“易格式体”),加载速度更快,而且有效解决了“病毒误报”和...