PE知识复习之PE的两种状态

时间:2021-05-19 00:54:55

          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查看.

PE知识复习之PE的两种状态

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.

PE知识复习之PE的两种状态

四丶确定文件头

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

PE知识复习之PE的两种状态

五丶确定扩展头

我们的扩展头很大.32位64不一样.我们文件头下面就是这个扩展头.

注意,我们这个头的大小也在文件头中存储着. 我们可以更改的.如果更改.那么我们的扩展头就要更改.

例如文件头中存储着扩展头大小

PE知识复习之PE的两种状态

而文件头下面的这些成员都是扩展头

六丶节表

节表是很重要的.我们真正的数据就是存在节表里面.

节表大小 十进制 40个字节,十六进制 0x28

PE知识复习之PE的两种状态

可以看出节表大小. 里面第一个是text节.第二个是rdata节...

在我们的扩展头中.有一个成员是记录着 DOS头 + NT头(文件+扩展 在一起称为NT)  + 节表的大小. 按照文件对齐存放着.

sizeofHeaders 按照文件对齐.存储着 头+ 节表的大小.

fileAlignment 是扩展头中的文件对齐值.

具体属性后面会详解.

七丶节数据

我们的节表存放着节数据的信息.比如节在哪里开始.数据在哪里存放. 而我们的 头+ 节表 按照文件对齐过后.下面就是节数据了.

例如:

PE知识复习之PE的两种状态

填写AAAA的地方是对其后没有使用的.所以我们如果熟悉PE可以添加任何成员进去.

八丶PE中的两种状态

根据上面简单了介绍了一下PE的存储结构.也知道了节数据跟节数据之间.都是根据文件对齐存放的.

但是我们的PE是可以运行的.(exe. dll也是.sys也是...这里指EXE) 所以在内存中状态也会改变.也就是偏移会改变.

例如下图:

PE知识复习之PE的两种状态

在文件中我们的对齐是按照 0x200存放的. 而在内存中就是按照0x1000.假设是1000. 多余的地方补0

我们 的DOS头 + NT头 + 节表.按照文件对齐之后存放着. 节的数据是从400开始.也就是上图.

但是在内存中就不一样了. 如果按照0x1000对齐.那么在内存中就是1000位置开始是节数据了.

首先内存中的位置不一样

PE知识复习之PE的两种状态

PE中 DOS头 + NT头 + 节表. 不管内存中还是文件中成员都是一样的.而因为对齐值不同.节数据开始位置也不同.

因为一个在文件中存放.一个在内存中展开.

比如我们在文件中 偏移 0x400位置.是节数据.在内存中就不会有了.

如下图所示:

PE知识复习之PE的两种状态

因为内存是按照0x1000进行对齐的 对齐方式0x1000也会有成员存储着.下面几讲复习的时候会讲到.

所以在内存中1000偏移位置才是节数据.如下图

PE知识复习之PE的两种状态

九丶总结PE中的两种状态.

PE分为文件状态.跟内存状态.

文件状态下. 根据扩展头下面的文件对齐值. 以及记录对其头的大小进行存放的.

内存状态下.根据扩展头中内存对齐值.以及对其头大小进行存放的.

比如:

  文件对齐值为0x200  DOS头 + NT头 + 节表 = 0x301大小. 但是文件对齐值是200.比如要整除200. 所以 对齐头打下不是0x301. 而是 0x400. 也就是0x400位置存放的是节数据.

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

PE知识复习之PE的两种状态的更多相关文章

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

    PE知识复习之PE的导入表 一丶简介 上一讲讲解了导出表. 也就是一个PE文件给别人使用的时候.导出的函数  函数的地址 函数名称 序号 等等. 一个进程是一组PE文件构成的.  PE文件需要依赖那些 ...

  2. PE知识复习之PE的RVA与FOA的转换

    PE知识复习之PE的RVA与FOA的转换 一丶简介PE的两种状态 首先我们知道PE有两种状态.一种是内存展开.一种是在文件中的状态.那么此时我们有一个需求. 我们想改变一个全局变量的初始值.此时应该怎 ...

  3. PE知识复习之PE的节表

    PE知识复习之PE的节表 一丶节表信息,PE两种状态.以及重要两个成员解析. 确定节表位置: DOS + NT头下面就是节表. 确定节表数量: 节表数量在文件头中存放着.可以准确知道节表有多少个. 节 ...

  4. PE知识复习之PE的绑定导入表

    PE知识复习之PE的绑定导入表 一丶简介 根据前几讲,我们已经熟悉了导入表结构.但是如果大家尝试过打印导入表的结构. INT IAT的时候. 会出现问题. PE在加载前 INT IAT表都指向一个名称 ...

  5. PE知识复习之PE的重定位表

    PE知识复习之PE的重定位表 一丶何为重定位 重定位的意思就是修正偏移的意思.  如一个地址位 0x401234 ,Imagebase = 0x400000 . 那么RVA就是 1234.  如果Im ...

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

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

  7. PE知识复习之PE文件空白区添加代码

    PE知识复习之PE文件空白区添加代码 一丶简介 根据上面所讲PE知识.我们已经可以实现我们的一点手段了.比如PE的入口点位置.改为我们的入口位置.并且填写我们的代码.这个就是空白区添加代码. 我们也可 ...

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

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

  9. PE知识复习之PE合并节

    PE知识复习之PE合并节 一丶简介 根据上一讲.我们为PE新增了一个节. 并且属性了各个成员中的相互配合. 例如文件头记录节个数.我们新增节就要修改这个个数. 那么现在我们要合并一个节.以上一讲我们例 ...

随机推荐

  1. 取消vs2013在代码中的Reference数量功能

    继续吐槽.新增的自动统计reference数量的功能: 不爽的是总以为那是一行空行,可是鼠标放上去总是落空,遂我要干掉他. 这玩意有个好处就是有两个版本的程序有小修改的时候(尤其有很多重载方法的调用变 ...

  2. Android开发之消息机制

    转:http://stackvoid.com/introduction-to-Message-Handler-in-Android/ http://blog.dreamtobe.cn/2016/03/ ...

  3. FPGA知识大梳理(一)对FPGA行业的一点感言

    今天想开始把这FPGA行业的知识点做一个大整理,从个人感想,到语法,到器件基础,难点攻克,到项目应用.把自己这几年接触到的知识做一个全面的回顾,看看自己这几年走过的路. 人生无常,几年的跌跌撞撞勉强算 ...

  4. 从URL到看到网页的过程

    从我们输入URL并按下回车键到看到网页结果之间发生了什么?换句话说,一张网页,要经历怎样的过程,才能抵达用户面前?下面来从一些细节上面尝试一下探寻里面的秘密. 前言:键盘与硬件中断 说到输入URL,当 ...

  5. windows 服务器MYSQL 数据库安装配置

    一.到官网下载MYSQL 打开官网地址:www.mysql.com, 选择 DOWNLOADS,进入到MySQL的下载页面,在页面的底部有一个MySQL Community Edition, 并且下面 ...

  6. 并发基础(九) java线程的终止与中断

    1.简单了解一下:为何不赞成使用 Thread.stop.Thread.suspend 和 Thread.resume?   suspend .resume.stop方法分别完成了线程的暂停.恢复.终 ...

  7. [ACM] POJ 3349 Snowflake Snow Snowflakes(哈希查找,链式解决冲突)

    Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 30512   Accep ...

  8. jdk版本对应数字

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springfr ...

  9. How to save rules of the iptables?

    The easy way is to use iptables-persistent. Install iptables-persistent: sudo apt-get install iptabl ...

  10. 李洪强iOS经典面试题35-按层遍历二叉树的节点

    李洪强iOS经典面试题35-按层遍历二叉树的节点 问题 给你一棵二叉树,请按层输出其的节点值,即:按从上到下,从左到右的顺序. 例如,如果给你如下一棵二叉树:    3   / \  9  20   ...