从FILE_BUFFER到IMAGE_BUFFER

首先需要知道FILE_BUFFER是什么,FILE_BUFFER就是文件存放在磁盘上的空间,IMAGE_BUFFER指的是文件在内存上存放的空间,而从磁盘到内存上,文件到底发生了什么。在这里先简略介绍一个,因为其中还有其他的很多因素,导入表,重定位表,段页,虚拟内存等等
在这里插入图片描述

首先,当我们点下鼠标,OS会给文件分配可选文件头中的虚拟的4GB大小的空间(我们不考虑虚拟内存,认为OS将这个文件全都存放在内存上的一个连续空间中)。

  • 这个SizeOfImage的大小包括:DOS头大小,垃圾数据,NT文件头,节表的大小,每个节表的SectionAlignment;字段,使用 对齐函数(VirtualSize,SectionAlignment) 的返回值相加。这里的对齐函数具体实现的功能就是将VirtualSize放大到SectionAlignment的整数倍。

在这里插入图片描述

然后,将文件的DOS文件头,垃圾数据,NT文件头,节表放入申请的空间中,位置是可选文件头中的ImageBase;字段
在这里插入图片描述

然后,将文件的各个节根据节表放入内存中,例如,将第一个节放入第一个节表的VirtualAddress;指示的位置,但是我们怎么知道在磁盘上的位置呢,使用的是第一个节表的PointerToRawData;字段,从文件开始存储的位置开始加上PointerToRawData;表示的就是这个节表开始的位置,读取的大小是SizeOfRawData
在这里插入图片描述
大概前期的过程就是这样,之后还会对导入表,重定位表进行操作,DLL映射到4GB的内存空间中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值