可执行文件结构是操作系统的根基,Windows系统下面有很多类型不同的文件,例如*.ex,*.dll,*.sys,*.ocx等文件格式都遵从PE文件结构的约定。

PE文件实在win32位系统中诞生的,而且与win64位系统中的可执行文件格式基本相同。

在Windows系统中,可以以二进制形式被系统加载执行的文件都是PE文件。

PE文件就是Portable Executable(可移植执行体)的简写,它是win32系统环境自身所带的可执行文件格式。可移植执行体,就意味着这个文件格式是跨win32平台的,换句话说,就是Windows运行在非Intel的CPU上,任何win32平台PE文件装载器都能够识别和使用这个文件格式,所以所以win32平台下的可执行文件也必须使用PE格式。

结构?

PE文件总的来说就是由DOS文件头,DOS加载模块,PE文件头,区段表和区段这5部分构成的。当然很多朋友会疑问,就是Windows系统下面的一个文件格式为什么会有两个与DOS相关的结构呢?其实如果PE文件运行在Windows系统下面,那么DOS文件头和DOS加载模块是压根用不到的,PE加载器会根据DOS文件头最后面那个标志跳过DOS加载模块而直接转到PE文件头上,其实有两个DOS相关的模块完全就是问了兼容问题考虑的,如果将PE文件在DOS系统下面运行的话,那么就到DOS加载模块表现的时候到了,DOS加载模块就会显示一句话:this program cannot be run in dos mode,翻译一下就是这个程序不能在DOS系统下面运行。

下面是我偷来的一张图片显示了PE文件的基本结构

通过上面的图片我们可以发现整个程序是以DOS文件头的MZ标志开始的,就是图中蓝色标记那里,接下来就是DOS加载模块了(用紫色线框住),看到那一句标志性的语句没有?this program must be run under win32,其实意思和我们上面说的那一句this program cannot be run in DOS mode是一模一样的啊!每个Windows程序差不多都是一样的信息。

下面还有一个以字母PE开头的(红色框住),就是我们前面说的PE文件头了。PE文件头的标准大小就是224字节。

再往下面就是.text,.data.rsrc.等构成的区段表了,区段表也叫做节表,我偷的那张图没有表示出来呀,节表的作用就相当于一本书的目录,能帮助PE加载器准确而快速地加载相应的区段。

我们通过区段名称就可以大体猜出这个区段里面包含了什么信息,起什么作用....,因为PE文件的区段名称都是有相应的约定的,但是也可以被他人修改掉而不守约定。

一个可执行文件不但包括可执行的二进制代码,而且还包括一些其它东西,比如菜单啊图标啊位图啊字符串啊等等。

PE文件格式很好地规定了这些信息在文件中是如何组织的。因此在程序被执行的时候系统会按照OE文件格式约定准确地定位文件中各种类型的资源,并将其准确地装入不同的内存区域中

PE文件格式如下

DOS MZ header       dos文件头
DOS stub            dos加载模块
PE header           pe文件头
section table       区段表
section 1           区段1
section 2           区段2
.....
section n           区段n

DOS MZ header:也叫DOS文件头或者DOS MZ文件头,它是以字母MZ开头的数据,在它的偏移量3C处包含着我PE文件头的起始位置信息。

DOS stub:就是DOS加载模块,以一段this program cannot be run in DOS mode为标志,当程序试图运行在DOS系统下会出现这句话。

PE header:我们要重点研究的PE文件头,它是一段以PE字母开头的数据,默认224字节,包含了很多信息。

section table:区段表,又叫节表,是一段记录这个程序中区段大小、位置与属性的表。

section 1:区段1,又叫做节,有很多的节,每个节都包含了各种不同的数据。

一个典型的PE文件包含以下区段:

.text区段 存放可执行的二进制代码区段

.data区段 初始化数据块,比如全局变量

.idata区段 程序所使用的动态链接库等外接函数和文件信息。

.rsrc区段 存放程序的资源,图标,菜单

但这些区段的名称都是可以在编译程序的时候手动设置,所以有时候不可靠。

最后为大家献上一张PE结构完整解析图

了解Windows系统下的PE文件相关推荐

  1. windows系统下批量修改文件后缀

    在Windows系统下批量修改文件后缀要用到 ren命令.在使用win10系统的朋友们肯定会发现系统会给自己推荐一些开机锁屏壁纸, 今天就用这个命令批量保存这些壁纸. 这些壁纸文件目录在: C:\Us ...

  2. Windows系统下隐藏的文件

    Windows下隐藏的文件有哪些? 怎样在没有准备专用软件的情况下,更快.更有效地保护自己的私人资料,而不让他人发现呢?今天,笔者结合自己的经验和他人的使用情况,谈谈如何在Windows下," ...

  3. Windows系统下自带压缩文件工具之makecab

    在内网渗透时,当没有rar.7z等压缩工具时候,拖取文件的时候为了防止流量过大,又必须压缩把文件压缩.当然你可以自己上传一个压缩工具.Windows自带制作压缩文件工具makecb你可以了解哈. 压缩 ...

  4. linuxdos(Explore2fs),一个windows系统下查看linux文件的工具

    linuxdos(Explore2fs),不支持中文目录和文件.下载地址 http://fresh.t-systems-sfr.com/unix/src/privat2/explore2fs-1.07 ...

  5. Windows系统下常见的文件类型及其扩展名

    今天小陈给大家分享一本书上的一个实用表(常见的文件类型及其扩展名)

  6. php ttf 字体 url,window_TTF字体文件如何安装 TTF文件打不开解决方法,TTF文件是Windows系统下的字体文 - phpStudy...

    TTF字体文件如何安装 TTF文件打不开解决方法 TTF文件是Windows系统下的字体文件,可通过系统自带的字体安装程序直接安装添加字体,比如常用的"仿宋_GB2312"字体就可 ...

  7. python修改文件格式为unix_软件测试技术之如何用python在Windows系统下,生成UNIX格式文件...

    本文将带你了解软件测试技术之如何用python在Windows系统下,生成UNIX格式文件,希望对大家学测试技术有所帮助 如何用python在Windows系统下,生成UNIX格式文件 平时测试工作中 ...

  8. Windows 系统下.sh文件的运行

    在论文期间好多的python项目是用Linux系统下写的,为了省事就尝试了再Windows系统下运行,以下是运行的过程:  1,Git的安装,下载Git并安装,我是在360软件管家中直接下载安装的,速 ...

  9. Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行——怎么将Unix/Mac系统下的文件转换到Windows系统下

    先交代一下遇到的问题: 本人用的是Windows系统.在学习Triangle Mesh时,想将bunny.ply等经典的PLY文件导入程序中. 但是,文件被读入程序后,所有的内容变成了一行.从而,现成 ...

最新文章

  1. JTEXTFIELD
  2. 一个App完成入门篇(五)- 完成新闻页面
  3. ASIHTTPRequest源码简单分析
  4. Python数据库连接池DBUtils
  5. 【15】docker
  6. coturn的负载均衡特性_高性能负载均衡
  7. 织梦响应式教育机构官网网站模板
  8. Jmeter系列之接口断言
  9. 华为9月3日或推出麒麟9000;TiDB 3.0.18 发布| 极客头条
  10. No package ‘libusb‘ found
  11. 广州蓝景分享—「web前端素材」使用CSS动画效果(上)
  12. 计算机表格计算公式加法,加法公式excel,excel表格如何用公式计算加减乘除混合运算?...
  13. 南京理工大学计算机考研资料汇总
  14. Matlab线性规划求解
  15. C64+DSP资源手册笔记
  16. 软件-xyplorer
  17. C语言串口一直接收00,串口助手一直接收00;
  18. SmartFoxServer 2X管理工具
  19. 当系统logoff或shutdown时,让应用程序正常关闭
  20. php字符串函数处理emoji,PHP中处理内容含有emoji表情的几种方式

热门文章

  1. 蚂蚁区块链第13课 如何搭建一个DAPP应用(以姓名年龄为例)
  2. Dreamweaver安装99卡死_原装耗材99元了解一下?兄弟DCP-B7535DW低成本也能“印”对自如...
  3. eclipse中导入项目后项目名称出现红叉叉,但项目能跑
  4. wordpress https,wordpress开启https方法
  5. 在使用matlab对矩阵求逆时出现了“警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确
  6. hugo本地服务器不显示文章,Windows10本地搭建hugo博客教程 – 有点嫌弃我自己的家庭版系统...
  7. stylelint检查报错:Unexpected missing generic font family font-family-no-missing-generic-family-keyword
  8. layout_marginLeft和layout_marginStart
  9. VNC Viewer虚拟机共享
  10. 修改VNC Viewer分辨率