[microsoft]PE和COFF文件格式
前言
我们知道,vs的C/C++编译工具把每一个编译单元(一个.c或.cpp源文件)编译成一个对象文件(.obj文件);然后用链接器把这些对象文件组合一个单个文件(.exe文件),称为可移植的可执行文件(portable executable简称为可执行文件)。强调portable说明是not architecture specific。
PE、COFF文件结构:
1、PE header:MS‐DOS stub, the PE signature, the COFF file header, and an optional header.
2\A COFF object file header consists of a COFF file header and an optional header.
3、In both cases, the file headers are followed immediately by section headers.
PE文件结构详解:
微软操作系统历史上使用了多种可执行文件格式,MS-DOS操作系统下有COM(.COM,不是对象组件模型)、MZ(.exe)、NE(.exe)文件格式;windows操作系统下有NE(.exe)、PE(.exe)、 PE32+(.exe)文件格式。对于PE文件格式,它向前兼容了MZ文件格式,好像没有兼容COM和NE两种文件格式。所以,PE文件一开始就是一个完整的MZ文件。
MZ文件以一个两字节的数字签名开始-MZ(0x4D5A),这是一名MS-DOS主要开发者Mark Zbikowski的名字缩写。PE文件中的MZ文件由文件头和文件数据构成,文件数据是一段MS-DOS 2.0 Stub Program,就是我们所说的DOS存根程序。此程序的主要作用是:当此程序在DOS环境下运行时,它告诉用户这不是一个DOS程序。
Liker.exe在MZ文件头中一个数据域(可能原来就是设计成以后扩展使用的)中(0x3c开始的4个字节)填充PE签名的开始位置,PE程序加载器从这里开始解析加载程序。PE签名(4字节0x50450000)之后便是COFF头,COFF头固定20字节长度;COFF头后面紧跟的是可选头(optional header),可选头的长度在COFF头的一个域中定义;到此文件头就结束了,后面紧跟的就是段表了和段数据区了。
我们应该注意到,PE签名的偏移量是在MZ头中给出的,但后面COFF头、可选头、段表、段数据区的偏移地址都需要通过PE签名的偏移地址得到。所以它们之间紧密相连,不能有间隔。PE签名(4字节)、COFF头(20字节)的长度是固定不变的,可选头的长度在COFF头中给出,段表项的数目在COFF头中给出,段表项长度(40字节)固定,这样各个部分的起始地址就很容易得到,具体说来:
- addr_PE_signature = *(0x3c)
- addr_coff_header = addr_PE_signature + 4
- addr_optional_heaer = addr_coff_header + 20
- addr_section_table = addr_optional_heaer + coff_header.SizeOfOptionalHeader
- addr_section_data = addr_section_table + coff_header.NumberOfSections*40
COFF文件结构详解:
[microsoft]PE和COFF文件格式的更多相关文章
- cve-2010-3333 Microsoft Office Open XML文件格式转换器栈缓冲区溢出漏洞 分析
用的是泉哥的POC来调的这个漏洞 0x0 漏洞调试 Microsoft Office Open XML文件格式转换器栈缓冲区溢出漏洞 Microsoft Office 是微软发布的非常流行的办公 ...
- COFF文件格式
链接器 目录 一 COFF-Common Object File Format-通用对象文件格式... 3 COFF的文件格式与结构体... 4 文件头... 5 numberOfSections(区 ...
- C++PE文件格式解析类(轻松制作自己的PE文件解析器)
PE是Portable Executable File Format(可移植的运行体)简写,它是眼下Windows平台上的主流可运行文件格式. PE文件里包括的内容非常多,详细我就不在这解释了,有兴趣 ...
- .NET本质论 组件
模块定义 CLR程序存在模块(module)中.一个CLR模块是一个字节流,通常作为一个文件存储在本地的文件系统中或者Web服务器上 CLR模块采用Windows NT的PE/COFF可执行文件格式的 ...
- C#编译相关知识
C#代码编译成MSIL代码. 当用户编译一个.NET程序时,编译器将源代码翻译成一组可以有效地转换为本机代码且独立于CPU的指令.当执行这些指令时,实时(JIT)编译器将它们转化为CPU特定的代码.由 ...
- 程序员的自我修养五Windows PE/COFF
5.1 Windows的二进制文件格式PE/COFF PE文件格式事实上与ELF同根同源,它们都是由COFF格式发展而来. 5.2 PE前身——COFF 在win下,Command Prompt fo ...
- PE文件结构及其加载机制
一.PE文件结构 PE即Portable Executable,是win32环境自身所带的执行体文件格式,其部分特性继承自Unix的COFF(Common Object File Format)文件格 ...
- ELF和a.out文件格式的比较
本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link editor output 汇编器和链接编辑器的输出).COFF(Common Ob ...
- PE文件常用结构体
Dos头结构: typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header WORD e_magic; // Magic number WORD e_c ...
随机推荐
- IE和Firefox的Javascript兼容性总结
长久以来JavaScript兼容性一直是Web开发者的一个主要问题.在正式规范.事实标准以及各种实现之间的存在的差异让许多开发者日夜煎熬.为此,主要从以下几方面差异总结IE和Firefox的Javas ...
- Mysql有两种存储引擎:InnoDB与Myisam
http://www.cnblogs.com/kevingrace/p/5685355.html
- windows+linux环境部署搭建
http://www.cnblogs.com/lioillioil/archive/2011/09/14/2176595.html
- R统计建模与R软件
教材目录 第一章 概率统计的基本知识 第二章 R软件的使用 第三章 数据描述性分析 第四章 参数估计 第五章 假设检验 第六章 回归分析 第七章 方差分析 第八章 应用多元分析(I) 第九章 应用多元 ...
- 慎用GetOpenFileName
这两天发现了一个小问题,经过一上午的排查终于找到了问题的原因--Windows 7的API函数GetOpenFileName竟然有BUG! 请参考下面的MFC代码: CFileDialog dlg(T ...
- 使用PowerShell简化我的工作
欢迎关注我的社交账号: 博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html GitHub地址: https://github.com/ji ...
- hdu----149850 years, 50 colors(最小覆盖点)
50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- form程序的界面修改
做主题视频库的界面的修改工作,是b/s端的窗口,是由form窗口生成,如下截图: 主要有三个方面,1.左侧菜单栏宽度固定,不随整个窗口大变化而变化.2.导出excel按钮的位置的移动,不管整个窗口是变 ...
- 数据库索引<二> 如何创建索引
前面一篇说法了索引结构,和几种索引在数据表上的结构,了解了索引可以为查询服务,这篇说一说如何创建索引. >平时可能的创建方式 这个系统中要用到A字段,B字段,C字段做为查询的条件,联接的条件较多 ...
- Android开发--Button的应用
1.Button的创建 Button的创建和TextView类似,包含按钮的ID,宽度,高度,提示(即按钮上的文本内容).