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位置存放的是节数据.

内存同上.只不过对齐值不同.

转载于:https://www.cnblogs.com/iBinary/p/9711028.html

PE知识复习之PE的两种状态相关推荐

  1. PE知识复习之PE的各种头属性解析

    PE知识复习之PE的各种头属性解析 一丶DOS头结构体 typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header WORD e_magic; // M ...

  2. PE知识复习之PE的导入表

    一丶简介 上一讲讲解了导出表. 也就是一个PE文件给别人使用的时候.导出的函数  函数的地址 函数名称 序号 等等. 一个进程是一组PE文件构成的.  PE文件需要依赖那些模块.以及依赖这些模块中的那 ...

  3. PE知识复习之PE的导出表

    一丶简介 在说明PE导出表之前.我们要理解.一个PE可执行程序.是由一个文件组成的吗. 答案: 不是.是由很多PE文件组成.DLL也是PE文件.如果我们PE文件运行.那么就需要依赖DLL.系统DLL就 ...

  4. 量子计算的基本原理——本质上是在操作薛定谔的猫(同时去运算和操作死+不死两种状态)...

    摘自:https://www.zhihu.com/question/26933442/answer/34797301 更新了!~更新了!稍微写的更详细一点.我觉得这样应该能懂了. 请专家指正.下面论述 ...

  5. 算法题:一个圆环上有100个灯泡,灯泡有打开和关闭两种状态,灯泡的状态随机,按一个灯泡的开关,相邻的两个灯泡的状态也发生一次变化。比如暗-亮-暗,按中间灯泡,变化为亮-暗-亮。问设计一道算法,使得所有

    算法题:一个圆环上有100个灯泡,灯泡有打开和关闭两种状态,灯泡的状态随机,按一个灯泡的开关,相邻的两个灯泡的状态也发生一次变化.比如暗-亮-暗,按中间灯泡,变化为亮-暗-亮.问设计一道算法,使得所有 ...

  6. 算法题:一个圆环上有100个灯泡,灯泡有打开关闭两种状态,灯泡状态随机。设计算法,使灯泡都亮。

    算法题:一个圆环上有100个灯泡,灯泡有打开关闭两种状态,灯泡状态随机,按一个灯泡,相邻两个灯泡的状态也会改变. eg: ' 暗 - 亮 - 暗 ' 按中间灯泡 ,变化为 ' 亮 - 暗 - 亮 '. ...

  7. Word初学者编辑文字时注意改写和插入两种状态

    本文是我讲授课程<Word 2003从入门到精通>的有关文本基础编辑部分的补充内容. Word初学者编辑文字时注意改写和插入两种状态,一般情况下文本操作时你可能注意不到这个问题.但是,如果 ...

  8. K210中断按键,自复位按键的两种状态

    K210中断按键,自复位按键的两种状态 自复位按键的功能通常有两种: 按下按键松手,蓝灯亮起,再次按下按键松手,蓝灯熄灭: 按下按键,蓝灯亮起,松手后,蓝灯熄灭. 功能1 from Maix impo ...

  9. 【按钮的两种状态 Objective-C语言】

    一.继续上一篇文章的按钮案例 1.先说思路: 1)先把最上面的图片按钮实现了 我们拽1个按钮,给它一个背景图,加一个文字"点我啊" 当你鼠标按下去的时候,换成另1个背景图 当你鼠标 ...

最新文章

  1. 树状数组的理解(前缀和 and 差分)
  2. easyui-menu 解决disableItem不能禁用绑定事件的方法
  3. C#实现HttpPost提交文件
  4. Java 基础学习-链接
  5. 理解 RXSwift:单元测试(四)
  6. 打印机服务器不支持1020,win10系统电脑安装hp1020打印机后无法使用的详细技巧
  7. php判断表单提交是否为空,JS判断提交表单不能为空代码 多种方案
  8. yandexbot ip列表整理做俄罗斯市场的站长可以关注一下
  9. unsigned int + int型结果分析
  10. Android官方开发文档Training系列课程中文版:管理音频播放之控制APP的音量与播放
  11. 【离散数学】幂集的求解
  12. 背景减法——自组织算法
  13. VC通过函数索引调用DLL范例
  14. 如何在ubuntu22.04上使用微软精英手柄
  15. 定位算法-三边测距定位
  16. 上传gitlab ! [remote rejected] dev - dev (pre-receive hook declined)
  17. 苹果Apple Watch真机调试的坑Could not download and install Symbols for watchOS
  18. 关于硕士毕业论文的思路整理
  19. 启动牛市的密钥藏宝计划(TPC),火热来袭!
  20. oracle 执行计划(F5)详解

热门文章

  1. stm32f4 RAM中运行程序 读保护设置
  2. Delphi 2010 refactor / refactoring 重构不能使用的原因以及解决
  3. 卷首寄语:我们的今天,明天--致所有战斗在一线的同行们
  4. Thinking in work
  5. 关于org.apache.lucene.queryParser.ParseException: Encountered 解决方法
  6. 快速理解编码,unicode与utf-8
  7. 用华为eNSP模拟器配置Hybrid、Trunk和Access三种链路类型端口
  8. Spring使用支付宝扫码支付
  9. c++作业5 9.22
  10. C# 7中函数多值返回_转自InfoQ