FileBuffer转ImageBuffer【滴水逆向三期43笔记】

简介: FileBuffer转ImageBuffer【滴水逆向三期43笔记】

一.FileBufffer与ImageBuffer的区别

我们知道从文件直接读取数据是将文件在硬盘中直接复制过来,计算机是不能直接执行的,如果要让程序执行,必须要有一个“拉伸”的过程,也就是课程中所说的ImageBuffer,但是ImageBuffer是不能直接执行的,但是它已经具备了执行的条件,再执行之前,要将ImageBuffer放入到程序独立的4GB运行空间中,这里给出FileBuffer与ImageBuffer的图:

二.SizeOfRawData一定大于Misc.VirtualSize吗?

我们知道在区块中,VirtualSize存储的是节没有对齐前的实际大小。SizeOfRawData是该节在磁盘文件中对齐后的大小,但是SizeOfRawData一定大于VirtualSize吗?答案是否定的,我们在反汇编中不难发现:在声明了变量后,如果没有进行初始化,那么在内存中是不会有任何操作的,只是告诉了编译器这个变量,那我们不妨设想一下:如果在该节中有许多未初始化的变量,计算机会分配内存吗?当让不会,如果某一个节中存在已经被定义过但还未初始化的数据,那么文件在硬盘上不会显式的留出空间SizeOfRawData中不会算上未初始化数据的空间;但是此节的Misc.VirtualSize为加载到内存中时节的未对齐的大小,那么这个值就需要算上给未初始化留出来空间后的整个节的大小,故在内存中的节本身的总大小可能会大于硬盘中的此节文件对齐后的大小。

三.RVA转FOA

在ImageBuffer中我们已知了一个数据的地址,成为RVA那么我们如何在ImageBuffer中找到该数据的地址(FOA)呢?

这里给出简要思路:

1.计算该数据对ImageBase的偏移大小

2.计算该数据在第几个节(通过循环节表的PointToRaw和SizeOfRawData)

3.计算该数据相对该节的PointToRawData偏移量

4.通过第三步计算出来的偏移量在磁盘文件中找到该数据。

这一节课程没有很多的知识点,但是很重要,主要体现在课后作业中:

1.写一个程序,实现从FileBuffer到ImageBuffer再从ImageBuffer到FileBuffer

2.写一个程序,实现从RVA转化为FOA

在本专栏中下一章我会将写出的程序源码分享给大家

文章中可能有许多不准确或者是我理解不到位的地方,非常希望大家指出,我会虚心学习,希望我们共同进步!

相关文章
|
18天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
18天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构的基本概念;算法的基本概念、特性以及时间复杂度、空间复杂度等举例说明;【含常见的报错问题及其对应的解决方法】
|
5月前
2022蓝桥杯大赛软件类省赛真题 修剪树木
2022蓝桥杯大赛软件类省赛真题 修剪树木
25 0
|
C++
你们想要的开源的冰墩墩模型来了!! 先睹为快!实现冰墩墩自由!
你们想要的开源的冰墩墩模型来了!! 先睹为快!实现冰墩墩自由!
166 0
FileBfufer转ImageBuffer【滴水逆向三期43作业源码】
FileBfufer转ImageBuffer【滴水逆向三期43作业源码】
|
存储 编译器
IAT表入门简析【滴水逆向三期52笔记】
IAT表入门简析【滴水逆向三期52笔记】
新增节添加代码【滴水逆向三期46笔记】
新增节添加代码【滴水逆向三期46笔记】
|
算法
每日一题冲刺大厂第二十一天 木材加工
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题为了让大家练到各种各样的题目,熟悉各种题型,一年以后,蜕变成为一个不一样的自己!
87 0
|
SQL
开胃菜12
开胃菜12
107 0
开胃菜12