了解Windows系统下的PE文件
可执行文件结构是操作系统的根基,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文件相关推荐
- windows系统下批量修改文件后缀
在Windows系统下批量修改文件后缀要用到 ren命令.在使用win10系统的朋友们肯定会发现系统会给自己推荐一些开机锁屏壁纸, 今天就用这个命令批量保存这些壁纸. 这些壁纸文件目录在: C:\Us ...
- Windows系统下隐藏的文件
Windows下隐藏的文件有哪些? 怎样在没有准备专用软件的情况下,更快.更有效地保护自己的私人资料,而不让他人发现呢?今天,笔者结合自己的经验和他人的使用情况,谈谈如何在Windows下," ...
- Windows系统下自带压缩文件工具之makecab
在内网渗透时,当没有rar.7z等压缩工具时候,拖取文件的时候为了防止流量过大,又必须压缩把文件压缩.当然你可以自己上传一个压缩工具.Windows自带制作压缩文件工具makecb你可以了解哈. 压缩 ...
- linuxdos(Explore2fs),一个windows系统下查看linux文件的工具
linuxdos(Explore2fs),不支持中文目录和文件.下载地址 http://fresh.t-systems-sfr.com/unix/src/privat2/explore2fs-1.07 ...
- Windows系统下常见的文件类型及其扩展名
今天小陈给大家分享一本书上的一个实用表(常见的文件类型及其扩展名)
- php ttf 字体 url,window_TTF字体文件如何安装 TTF文件打不开解决方法,TTF文件是Windows系统下的字体文 - phpStudy...
TTF字体文件如何安装 TTF文件打不开解决方法 TTF文件是Windows系统下的字体文件,可通过系统自带的字体安装程序直接安装添加字体,比如常用的"仿宋_GB2312"字体就可 ...
- python修改文件格式为unix_软件测试技术之如何用python在Windows系统下,生成UNIX格式文件...
本文将带你了解软件测试技术之如何用python在Windows系统下,生成UNIX格式文件,希望对大家学测试技术有所帮助 如何用python在Windows系统下,生成UNIX格式文件 平时测试工作中 ...
- Windows 系统下.sh文件的运行
在论文期间好多的python项目是用Linux系统下写的,为了省事就尝试了再Windows系统下运行,以下是运行的过程: 1,Git的安装,下载Git并安装,我是在360软件管家中直接下载安装的,速 ...
- Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行——怎么将Unix/Mac系统下的文件转换到Windows系统下
先交代一下遇到的问题: 本人用的是Windows系统.在学习Triangle Mesh时,想将bunny.ply等经典的PLY文件导入程序中. 但是,文件被读入程序后,所有的内容变成了一行.从而,现成 ...
最新文章
- JTEXTFIELD
- 一个App完成入门篇(五)- 完成新闻页面
- ASIHTTPRequest源码简单分析
- Python数据库连接池DBUtils
- 【15】docker
- coturn的负载均衡特性_高性能负载均衡
- 织梦响应式教育机构官网网站模板
- Jmeter系列之接口断言
- 华为9月3日或推出麒麟9000;TiDB 3.0.18 发布| 极客头条
- No package ‘libusb‘ found
- 广州蓝景分享—「web前端素材」使用CSS动画效果(上)
- 计算机表格计算公式加法,加法公式excel,excel表格如何用公式计算加减乘除混合运算?...
- 南京理工大学计算机考研资料汇总
- Matlab线性规划求解
- C64+DSP资源手册笔记
- 软件-xyplorer
- C语言串口一直接收00,串口助手一直接收00;
- SmartFoxServer 2X管理工具
- 当系统logoff或shutdown时,让应用程序正常关闭
- php字符串函数处理emoji,PHP中处理内容含有emoji表情的几种方式
热门文章
- 蚂蚁区块链第13课 如何搭建一个DAPP应用(以姓名年龄为例)
- Dreamweaver安装99卡死_原装耗材99元了解一下?兄弟DCP-B7535DW低成本也能“印”对自如...
- eclipse中导入项目后项目名称出现红叉叉,但项目能跑
- wordpress https,wordpress开启https方法
- 在使用matlab对矩阵求逆时出现了“警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确
- hugo本地服务器不显示文章,Windows10本地搭建hugo博客教程 – 有点嫌弃我自己的家庭版系统...
- stylelint检查报错:Unexpected missing generic font family font-family-no-missing-generic-family-keyword
- layout_marginLeft和layout_marginStart
- VNC Viewer虚拟机共享
- 修改VNC Viewer分辨率