PE文件格式详解(四)
0x00 前言
上一篇介绍了区块表的信息,以及如何在hexwrokshop找到区块表。接下来,我们继续深入了解区块,并且学会文件偏移和虚拟地址转换的知识。
0x01 区块对齐值
首先我们要知道啥事区块对齐?为啥要区块对齐?这个问题其实困扰了我很久,只能怪我操作系统没学好。。。我现在的理解是由于内存和磁盘存在分页的问题所以使得不同区块一般要放到不同的分页中,当然也可以多个区块合并以节省空间,但是对于不能合并的区块如代码和数据块就不得不放在不同分页上了。学过操作系统的都知道不管是磁盘和内存分页都是一个大学问。由于不同块放在不同分页,其实这个对齐值就是分页的整数的值。至于为啥要区块对齐,这也是有分页导致的。下图为PE文件加载映射示意图:

根据上图我们知道PE文件有两个对齐值,一个是磁盘的对齐值,一个是内存中的对齐值。
1)磁盘中对齐值是定义在PE文件头中的FileAligament中。每一块区块从对齐值倍数位置开始存放,对于没有填满的部分会用0填充。这些0构成了区块间隙。例如:对齐值为200h,一个区块大小位50h,它从400h开始存放,直到450h结束,其后的450h到600h就用0填充。
2)内存的对齐值和磁盘差不多。它是定义在PE文件头的SectionAligaments中。它也是从一个对齐值整数倍开始存放,未填满的用0填充。
0x01 文件地址和虚拟地址转换
首先为啥要转换?由上图可知,其实主要是是因为PE文件加载后它在磁盘和内存中的地址是不一样的。我们一般都能抓取他在内存中的值,然后根据内存中的值(叫虚拟地址)来逆推出它在磁盘中的位置。这样我们也能判断PE加载后到底调用了系统中哪些函数。下图展示了各个地址间的关系:

这里的FileOffset就是我们要找的各个区块在磁盘中的位置。
由于同一区块内FileOffset和相对地址RAV之间的值是一定的。比如.text区块中的FileOffset和RVA之间都是0c00h,用k表示他们之间的差值。就有公式FileOffset=RAV-K,一般情况下都是由RVA求FileOffset。
举个例子:某个PE文件载入后读出的虚拟地址VA值为401112h,ImageBase值为400000h,k的值为0c00h,求它的文件的FileOffset值。
RAV=VA-ImageBse=401112h-400000h=11112h
FileOffset=RVA-k=11112h-0c00h=512h。
PE文件格式详解(四)的更多相关文章
- PE文件格式详解,第一讲,DOS头文件格式
PE文件格式详解,第一讲,DOS头文件格式 今天讲解PE文件格式的DOS头文件格式 首先我们要理解,什么是文件格式,我们常说的EXE可执行程序,就是一个文件格式,那么我们要了解它里面到底存了什么内容 ...
- PE文件格式详解(七)
PE文件格式详解(七) Ox00 前言 前面好几篇在讲输入表,今天要讲的是输出表和地址的是地址重定位.有了前面的基础,其实对于怎么找输出表地址重定位的表已经非常熟悉了. 0x01 输出表结构 ...
- PE文件格式详解,第二讲,NT头文件格式,以及文件头格式
PE文件格式详解,第二讲,NT头文件格式,以及文件头格式 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) PS:本篇博客 ...
- PE文件格式详解,第三讲,可选头文件格式,以及节表
PE文件格式详解,第三讲,可选头文件格式,以及节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶可选头结构以及作 ...
- PE文件格式详解(上)
作者:MSDN 译者:李马 摘要 Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式.PE文件格式的规范包含在了MSDN的CD中(Specs and Strategy, Spec ...
- PE文件格式详解(一)
PE文件格式介绍(一) 0x00 前言 PE文件是portable File Format(可移植文件)的简写,我们比较熟悉的DLL和exe文件都是PE文件.了解PE文件格式有助于加深对操作系统的理解 ...
- PE文件格式详解(下)
作者:MSDN译者:李马 预定义段 一个Windows NT的应用程序典型地拥有9个预定义段,它们是.text..bss..rdata..data..rsrc..edata..idata..pdata ...
- PE 文件格式详解
PE文件 是微软 Win32 环境下可执行文件的标准格式. 所谓的可执行文件并不仅仅是常见的 EXE 文件,DLL,SYS,VXD 等文件也都属于 PE 格式. |-------> DOS_MZ ...
- PE文件格式详解(六)
0x00 前言 前面两篇讲到了输出表的内容以及涉及如何在hexWorkShop中找到输出表及输入DLL,感觉有几个地方还是没有理解好,比如由数据目录表DataDirectory[16]找到输出表表后以 ...
随机推荐
- 为.netcore助力--WebApiClient正式发布core版本
1 前言 WebApiClient已成熟稳定,发布了WebApiClient.JIT和WebApiClient.AOT两个nuget包,累计近10w次下载.我对它的高可扩展性设计相当满意和自豪,但We ...
- Spring AOP 之二:Pointcut注解表达式
简介 在Spring AOP概述中我们重点注意的是AOP的整体流程和Advice,简化了一些其他的东西,其中就有一些对灵活应用Spring AOP很重要的知识点,例如Pointcut表达式,下面就介绍 ...
- laravel里的队列学习
首先,我们要搞明白几个概念,从小到大依次有:队列任务,队列,连接. 他们属于依次被包含的关系,一个队列里有许多的队列任务,一个连接中可以有许多队列. 队列任务:对每个用户都会进行的操作,理解为队列任务 ...
- 深入理解PHP原理之Opcodes
Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL. 举个例子,比如你写下了如下的PHP代码: <?php echo "Hello Wo ...
- Nginx思维导图
1. Nginx简介 1.1 nginx概述 1.2 nginx的安装及程序环境 1.3 零复制&五种IO模型 1.4 nginx的基本配置 2. Nginx配置详解 2.1 main配置段详 ...
- jenkins初始化启动报错导致进入web页面如法安装插件
报错如下图所示: 解决方法: #1 查看网卡设置是否正确 #2 确定是否设置域名服务器 #3 查看路由表是否正常 #4 确保可用dns解析 #5 ping一下常见的公网地址
- matplotlib浅析
首先放出matplotlib的中英文文档: 中文:https://www.matplotlib.org.cn/ 英文:https://matplotlib.org/3.1.1/index.html M ...
- 科学计算:Python 分析数据找问题,并图形化
对于记录的数据,如何用 Python 进行分析.或图形化呢? 本文将介绍 numpy, matplotlib, pandas, scipy 几个包,进行数据分析.与图形化. 准备环境 Python 环 ...
- salesforce零基础学习(九十八)Type浅谈
在Salesforce的世界,凡事皆Metadata. 先通过一句经常使用的代码带入一下: Account accountItem = (Account)JSON.deserialize(accoun ...
- ca71a_c++_指向函数的指针_通过指针调用函数txwtech
/*ca71a_c++_指向函数的指针_通过指针调用函数用typedef简化函数指针的定义简化前: bool(*pf)(const string&, const string &); ...