从win32中的写时复制(Copy on write )机制谈起

本文介绍了Windows系统加载可执行文件的过程,涉及内存映射文件和地址空间预定。接着深入探讨了Copy on Write机制,如何在多进程共享内存时保护数据的一致性,防止灾难性后果。最后,通过一个获取PE文件导入表的例子,展示了内存映射文件在程序分析中的应用。
摘要由CSDN通过智能技术生成

我们知道,内存映射文件的物理存储器来自磁盘上已有的文件,而不是来自也交换文件。系统在加载exe和dll文件的时候使用的是内存映射文件来载入并运行exe和dll,这样大大节省了页交换文件的空间以及应用程序的启动时间。所以,实际上系统载入exe文件的时候就是利用内存映射文件技术把磁盘中的exe文件映射到内存(实际上,系统只是预定了一块足够大的地址空间来容纳exe文件,一定要注意“预定”这个词,待预定的地址空间区域的具体位置已经在exe文件中指定。默认情况下,exe的基地址为0x00400000.系统也会对这个地址空间的区域进行标注,表明该区域的后备物理存储区来自磁盘上的exe文件,而非来自系统的页交换文件。

以上就是,系统装载可执行文件的时经常被称为“映射到地址空间”的解释了,实际上就是创建了exe文件对应的页交换文件,也就是系统为这个exe文件的执行预定了足够大的地址空间,在x86下为4G的地址空间。

以上是系统加载exe文件的过程,映射到地址空间之后,系统开始执行exe文件的启动代码。完成了这个映射过程后,系统会负责所有的换页(paging),缓存(buffering)以及高速缓存(caching)的操作。例如,如果.exe文件中的代码跳到一个指令地址,但是该地址尚未载入内存,那么会引发一个页错误(page fault)。系统会检测到这个错误并自动将该页代码从文件载入到内存。然后系统会把该内存页映射到进程地址空间中的适合位置,并让线程继续执行,就好像该页代码早就在内存中一样。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值