PE知识复习之PE的两种状态
PE知识复习之PE的两种状态
一丶熟悉PE的整体结构

从下面依次网上看.可以得出PE结构
其中DOS头有DOS头结构 也就是 IMAGE_DOS_HEADER
关于结构体的各项属性.前边已经写过了.本系列博客就是加深PE印象.理解复杂的原理.
IMAGE_DOS_HEADER 大小 64个字节 十六进制 0x40字节
IMAGE_FILE_HEADER 大小 20个字节 十六进制 0x14字节
IAMGE_OPTIONAL_HEADER 224个字节 十六进制 0xE0
IMAGE_SECTION_HEADER 40个字节 十六进制 0x28
二丶学习DOS头
根据上面得到DOS头所占用大小是0x40. 也就是说一个按照16进制为一行的PE文件.4行正好就是一个DOS头大小.
例如: 使用Winhex查看.

DOS结构体重要的成员就两个.
1.MZ头
2.指向PE偏移.
MZ头就是标出来的 4D 5A 大小是两个字节. 操作系统会以检查这个标识.判断是否是PE文件.
PE偏移 0x00000138 大小是4个字节.指向PE头. NT头中的PE标识.操作系统不光检查MZ 也检查PE.
三丶DOS stub
Dos stub 大小是不确定的,他的大小是 PE头减掉 DOS头大小.其中成员都是Dos stub.

四丶确定文件头
根据我们文件头大小. 0x14 大小.那么PE后面就是文件头

五丶确定扩展头
我们的扩展头很大.32位64不一样.我们文件头下面就是这个扩展头.
注意,我们这个头的大小也在文件头中存储着. 我们可以更改的.如果更改.那么我们的扩展头就要更改.
例如文件头中存储着扩展头大小

而文件头下面的这些成员都是扩展头
六丶节表
节表是很重要的.我们真正的数据就是存在节表里面.
节表大小 十进制 40个字节,十六进制 0x28

可以看出节表大小. 里面第一个是text节.第二个是rdata节...
在我们的扩展头中.有一个成员是记录着 DOS头 + NT头(文件+扩展 在一起称为NT) + 节表的大小. 按照文件对齐存放着.
sizeofHeaders 按照文件对齐.存储着 头+ 节表的大小.
fileAlignment 是扩展头中的文件对齐值.
具体属性后面会详解.
七丶节数据
我们的节表存放着节数据的信息.比如节在哪里开始.数据在哪里存放. 而我们的 头+ 节表 按照文件对齐过后.下面就是节数据了.
例如:

填写AAAA的地方是对其后没有使用的.所以我们如果熟悉PE可以添加任何成员进去.
八丶PE中的两种状态
根据上面简单了介绍了一下PE的存储结构.也知道了节数据跟节数据之间.都是根据文件对齐存放的.
但是我们的PE是可以运行的.(exe. dll也是.sys也是...这里指EXE) 所以在内存中状态也会改变.也就是偏移会改变.
例如下图:

在文件中我们的对齐是按照 0x200存放的. 而在内存中就是按照0x1000.假设是1000. 多余的地方补0
我们 的DOS头 + NT头 + 节表.按照文件对齐之后存放着. 节的数据是从400开始.也就是上图.
但是在内存中就不一样了. 如果按照0x1000对齐.那么在内存中就是1000位置开始是节数据了.
首先内存中的位置不一样

PE中 DOS头 + NT头 + 节表. 不管内存中还是文件中成员都是一样的.而因为对齐值不同.节数据开始位置也不同.
因为一个在文件中存放.一个在内存中展开.
比如我们在文件中 偏移 0x400位置.是节数据.在内存中就不会有了.
如下图所示:

因为内存是按照0x1000进行对齐的 对齐方式0x1000也会有成员存储着.下面几讲复习的时候会讲到.
所以在内存中1000偏移位置才是节数据.如下图

九丶总结PE中的两种状态.
PE分为文件状态.跟内存状态.
文件状态下. 根据扩展头下面的文件对齐值. 以及记录对其头的大小进行存放的.
内存状态下.根据扩展头中内存对齐值.以及对其头大小进行存放的.
比如:
文件对齐值为0x200 DOS头 + NT头 + 节表 = 0x301大小. 但是文件对齐值是200.比如要整除200. 所以 对齐头打下不是0x301. 而是 0x400. 也就是0x400位置存放的是节数据.
内存同上.只不过对齐值不同.
PE知识复习之PE的两种状态的更多相关文章
- PE知识复习之PE的导入表
PE知识复习之PE的导入表 一丶简介 上一讲讲解了导出表. 也就是一个PE文件给别人使用的时候.导出的函数 函数的地址 函数名称 序号 等等. 一个进程是一组PE文件构成的. PE文件需要依赖那些 ...
- PE知识复习之PE的RVA与FOA的转换
PE知识复习之PE的RVA与FOA的转换 一丶简介PE的两种状态 首先我们知道PE有两种状态.一种是内存展开.一种是在文件中的状态.那么此时我们有一个需求. 我们想改变一个全局变量的初始值.此时应该怎 ...
- PE知识复习之PE的节表
PE知识复习之PE的节表 一丶节表信息,PE两种状态.以及重要两个成员解析. 确定节表位置: DOS + NT头下面就是节表. 确定节表数量: 节表数量在文件头中存放着.可以准确知道节表有多少个. 节 ...
- PE知识复习之PE的绑定导入表
PE知识复习之PE的绑定导入表 一丶简介 根据前几讲,我们已经熟悉了导入表结构.但是如果大家尝试过打印导入表的结构. INT IAT的时候. 会出现问题. PE在加载前 INT IAT表都指向一个名称 ...
- PE知识复习之PE的重定位表
PE知识复习之PE的重定位表 一丶何为重定位 重定位的意思就是修正偏移的意思. 如一个地址位 0x401234 ,Imagebase = 0x400000 . 那么RVA就是 1234. 如果Im ...
- PE知识复习之PE的导出表
PE知识复习之PE的导出表 一丶简介 在说明PE导出表之前.我们要理解.一个PE可执行程序.是由一个文件组成的吗. 答案: 不是.是由很多PE文件组成.DLL也是PE文件.如果我们PE文件运行.那么就 ...
- PE知识复习之PE文件空白区添加代码
PE知识复习之PE文件空白区添加代码 一丶简介 根据上面所讲PE知识.我们已经可以实现我们的一点手段了.比如PE的入口点位置.改为我们的入口位置.并且填写我们的代码.这个就是空白区添加代码. 我们也可 ...
- PE知识复习之PE的各种头属性解析
PE知识复习之PE的各种头属性解析 一丶DOS头结构体 typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header WORD e_magic; // M ...
- PE知识复习之PE合并节
PE知识复习之PE合并节 一丶简介 根据上一讲.我们为PE新增了一个节. 并且属性了各个成员中的相互配合. 例如文件头记录节个数.我们新增节就要修改这个个数. 那么现在我们要合并一个节.以上一讲我们例 ...
随机推荐
- Vue.js的安装及简单使用
一.Vue简介 二.Vue.js的安装 2.1.npm安装 2.1.1.node.js介绍及安装 简介: 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基 ...
- 用JDBC把Excel中的数据导入到Mysql数据库中
步骤:0.在Mysql数据库中先建好table 1.从Excel表格读数据 2.用JDBC连接Mysql数据库 3.把读出的数据导入到Mysql数据库的相应表中 其中,步骤0的table我是先在Mys ...
- LINUX监控-spotlight
这里连接的user不能是root(spotlight需要一个具有root权限的用户,但是又不允许是root),所以需要给要连接的linux端创建一个有root权限的用户,在linux主机创建了root ...
- DataTable的Merge\COPY\AcceptChange使用说明
在C#内使用DataTable的Merge().Copy().AcceptChange().Clone()方法的用途如下: 1.Merge()可将两个不同的表结构的表进行合并,合并后新表的列为之前两表 ...
- 如何查看ubuntu系统版本信息
第一种方法: hadoop@master:~$ cat /proc/version Linux version 4.4.0-21-generic (buildd@lgw01-21):Linux内核版本 ...
- Python3小知识点
1. 是转义字符,\可以输出.在一行的末尾单独的一个\表示这行没有结束,下一行接着写 2.可以用"'或"""把一大段话引起来(可以换行)然后赋值,输出. 3.要 ...
- xpath使用方法
一.选取节点常用的路劲表达式: 表达式 描述 实例 nodename 选取nodename节点的所有子节点 xpath(‘//div’) 选取了div节点的所有子节点 / 从根节点选取 xpath ...
- ora-01033 oracle initialization or
这次出现这个问题是源于错删了 DBF文件. 解决方案如下: 1.打开SQL Plus 最后把你删掉的那个文件的表空间删掉就好了
- CUDA编程模型
1. 典型的CUDA编程包括五个步骤: 分配GPU内存 从CPU内存中拷贝数据到GPU内存中 调用CUDA内核函数来完成指定的任务 将数据从GPU内存中拷贝回CPU内存中 释放GPU内存 *2. 数据 ...
- 让 ComboBox 的每个栏目显示不同颜色
在一般的应用程式中,使用 ComboBox 提供下拉选单的功能,让使用者选择不同项目,一般而言, ComboBox 的项目没有什么特别的,但在特定的应用程式中,有时候会希望每个项目有一些效果呈现,例如 ...