关于Windows PE
首先引用一段百科中对win pe的介绍:
Windows Preinstallation Environment(Windows PE),Windows预安装环境,是带有有限服务的最小Win32子系统,基于以保护模式运行的Windows XP Professional及以上内核。它包括运行Windows安装程序及脚本、连接网络共享、自动化基本过程以及执行硬件验证所需的最小功能。用于安装、部署和修复 Windows 桌面版(家庭版、专业版、企业版和教育版)、Windows Server 和其他 Windows 操作系统,而Windows PE并非为普通用户可以正常使用的操作系统,多数用于开发人员及维修主系统使用。 [1]
Windows PE含有Windows XP、Windows Server 2003、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10的PE内核。
PE文件就是Portable Executable(可移植执行体)的简写,它是win32系统环境自身所带的可执行文件格式。可移植执行体,就意味着这个文件格式是跨win32平台的,换句话说,就是Windows运行在非Intel的CPU上,任何win32平台PE文件装载器都能够识别和使用这个文件格式,所以所以win32平台下的可执行文件也必须使用PE格式。常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)。
1.PE文件结构
PE 文件格式被组织为一个线性的数据流,它由一个MS-DOS 头部开始,接着是一个是模式的程序残余以及一个PE 文件标志,这之后紧接着PE文件头和可选头部。这些之后是所有的段头部,段头部之后跟随着所有的段实体。文件的结束处是一些其它的区域,其中是一些混杂的信息,包括重分配信息、符号表信息、行号信息以及字串表数据。
PE文件总的来说就是由DOS文件头,DOS加载模块,PE文件头,区段表和区段这5部分构成的。对为什么 有两个DOS的解释:如果PE文件运行在Windows系统下面,那么DOS文件头和DOS加载模块是压根用不到的,PE加载器会根据DOS文件头最后面那个标志跳过DOS加载模块而直接转到PE文件头上,其实有两个DOS相关的模块完全就是问了兼容问题考虑的,如果将PE文件在DOS系统下面运行的话,那么就到DOS加载模块表现的时候到了,DOS加载模块就会显示一句话:this program cannot be run in dos mode,翻译一下就是这个程序不能在DOS系统下面运行.
DOS文件头:它是以字母MZ开头的数据,在它的偏移量3C处包含着我PE文件头的起始位置信息。
DOS加载模块:以一段this program cannot be run in DOS mode为标志,当程序试图运行在DOS系统下会出现这句话。
PE文件头:要重点研究的PE文件头,它是一段以PE字母开头的数据,默认224字节。
区段表:又叫节表,是一段记录这个程序中区段大小、位置与属性的表。
区段:又叫做节,有很多的节,每个节都包含了各种不同的数据。
一个典型的PE文件包含以下区段:
.text区段 存放可执行的二进制代码区段
.data区段 初始化数据块,比如全局变量
.idata区段 程序所使用的动态链接库等外接函数和文件信息。
.rsrc区段 存放程序的资源,图标,菜单。
DOS头和NT头就是PE文件中两个重要的文件头。
下面是DOS头的定义:
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE headerWORD e_magic; // Magic numberWORD e_cblp; // Bytes on last page of fileWORD e_cp; // Pages in fileWORD e_crlc; // RelocationsWORD e_cparhdr; // Size of header in paragraphsWORD e_minalloc; // Minimum extra paragraphs neededWORD e_maxalloc; // Maximum extra paragraphs neededWORD e_ss; // Initial (relative) SS valueWORD e_sp; // Initial SP valueWORD e_csum; // ChecksumWORD e_ip; // Initial IP valueWORD e_cs; // Initial (relative) CS valueWORD e_lfarlc; // File address of relocation tableWORD e_ovno; // Overlay numberWORD e_res[4]; // Reserved wordsWORD e_oemid; // OEM identifier (for e_oeminfo)WORD e_oeminfo; // OEM information; e_oemid specificWORD e_res2[10]; // Reserved wordsLONG e_lfanew; // File address of new exe header} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
e_magic:一个WORD类型,值是一个常数0x4D5A,用文本编辑器查看该值位‘MZ’,可执行文件必须都是'MZ'开头。
e_lfanew:为32位可执行文件扩展的域,用来表示DOS头之后的NT头相对文件起始地址的偏移。
顺着DOS头中的e_lfanew,我们很容易可以找到NT头,这个才是32位PE文件中最有用的头,定义如下:
typedef struct _IMAGE_NT_HEADERS {DWORD Signature;IMAGE_FILE_HEADER FileHeader;IMAGE_OPTIONAL_HEADER32 OptionalHeader;} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
关于Windows PE相关推荐
- Windows PE入门基础知识:Windows PE的作用、命名规则、启动方式、启动原理
Windows PE的全名是WindowsPreinstallationEnvironment(WinPE)直接从字面上翻译就 是"Windows预安装环境".微软的本意是:Win ...
- Windows PE变形练手2-开发一套自己的PE嵌入模板
PE嵌入模板 编写一段代码,生成一个已经处理过重定位信息,同时所有的内容都在代码段里,并且没有导入表的PE程序,把这个程序嵌入到其他PE的相关位置,能够独立的运行,接下来是整理了2个模板,一个是Hel ...
- Windows Pe 第三章 PE头文件(上)
第三章 PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过P ...
- 菜鸟教程终极篇之Microsoft Windows Pre-installation Environment (Windows PE) 2.0
大家好啊.通过以前的菜鸟日记大家感觉咋样?今天给大家带来新的知识.学完本文所讲的内容,谁敢在说你是菜鸟.你就拿砖块拍它!HOHO!!Go on! 平时我们在使用电脑中 ...
- 基于windows PE文件的恶意代码分析;使用SystemInternal工具与内核调试器研究windows用户空间与内核空间...
基于windows PE文件的恶意代码分析:使用SystemInternal工具与内核调试器研究windows用户空间与内核空间 ******************** 既然本篇的主角是PE文件,那 ...
- Windows PE 背景知识
1.什么是 Windows PE? 1.1 简要介绍 Windows Preinstallation Environment (Windows PE) 是一个为 Windows 安装而设计的最小操作系 ...
- 【虚拟机里测试Windows PE的方法】
有时候我们需要在虚拟机里测试Windows PE镜像文件.下面就以VMWare Workstation为例,步骤如下: 1.运行虚拟机软件VMWare Workstation并新建虚拟机(如xp). ...
- 使用Windows PE部署Windows镜像
1. 为镜像部署准备WinPE 启动光盘 在不使用第三方的软件工具(如赛门铁克Ghost)来创建和部署Windows系统镜像的情况下,用户需要一张可启动WinPE的光盘.Windows预安装环境(Wi ...
- 自己制作Windows PE工具盘
自己制作Windows PE工具盘 2007-04-13 20:46:47 标签: Windows PE工具盘 Windows PE的 全称为Windows Preinstallation Envi ...
- 告诉你Windows PE 是什么东东?详细介绍一下winpe
针对菜菜朋友可以对PE这样理解: 大家是不是都用过xp系统?(一个独立的操作系统) xp系统是由好多好多的文件构成的:.exe .txt .dll ~~~ 那么大家一定也知道精简型的XP(没用过也不会 ...
最新文章
- 【Binary Tree Level Order Traversal】cpp
- oracle 两个逗号分割的字符串 如何判断是否其中有相同值
- QT的QStylePainter类的使用
- zuul在zuulFilter获取返回值后,接口获取不到数据
- Ubuntu 16.04安装Memcached(单机)
- 3.2. 添加模板版本(Core Data 应用程序实践指南)
- 循环序列模型 —— 1.9 GRU单元(门控循环单元)
- JPA ---- 表之间的映射关系
- git教程(二)--安装和配置git
- 某 iOS 零点击 0day 漏洞已存在8年之久且正遭利用?苹果称正在调查并将推出补丁...
- 通过JS制作一个简易数码时钟
- python学习笔记(xlsxwriter模块使用)
- TensorFlow 莫烦python
- 浪潮服务器网卡驱动丢失怎么修复,电脑丢失网卡驱动,学会这一招,轻松搞定...
- ART加载OAT文件的过程分析
- 超简单全面的html图片自动轮播
- 宽带拨号方式接入校网网指南 | windows10、win11、mac设置宽带拨号
- Linux必会100个命令(三十八)halt
- UniAPP HBuilderX 运行到各个小程序开发工具
- 国开《医药商品营销实务》形考任务1 作业1 欧题库答案
热门文章
- 赶路人-----李小晓
- 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: Shared Memory Provider, error: 0-管道的另一端上无任何进程
- 名品极选联合大牌美妆,全面拓展消费需求
- shell计算命令:let命令详解
- 【Pytorch基础教程34】EGES召回模型
- 计算机科学与技术补中益气丸的成分,补中益气丸的成分是什么
- 高等数学(三) 极限
- sequelize 设置mysql字段类型,text字符长度太小可采用longText
- PDF怎么拆分/合并? 3款 PDF 拆分和合并工具分享
- matlab 使用 utf-8 编码