虚拟内存

        Windows 的内存可以被分为两个层面:物理内存和虚拟内存。
        如图 1.2.1 所示,Windows 让所有的进程都“相信”自己拥有独立的 4GB 内存空间。但是,我们计算机中那根实际的内存条可能只有512MB,怎么可能为所有进程都分配4GB的内存呢?
这一切都是通过虚拟内存管理器的映射做到的。
        虽然每个进程都“相信”自己拥有 4GB 的空间,但实际上它们运行时真正能用到的空间根本没有那么多。内存管理器只是分给进程了一片“假地址”,或者说是“虚拟地址”,让进程们“认为”这些“虚拟地址”都是可以访问的。如果进程不使用这些“虚拟地址”,它们对进程来说就只是一笔“无形的数字财富”;当需要进行实际的内存操作时,内存管理器才会把“虚拟地址”和“物理地址”联系起来。

PE文件与虚拟内存之间的映射

(1)文件偏移地址(File Offset)

数据在 PE 文件中的地址叫文件偏移地址,个人认为叫做文件地址更加准确。这是文件在磁盘上存放时相对于文件开头的偏移。

2)装载基址(Image Base)

PE 装入内存时的基地址。默认情况下,EXE 文件在内存中的基地址是 0x00400000,DLL文件是 0x10000000。这些位置可以通过修改编译选项更改。

3)虚拟内存地址(Virtual Address,VA)

PE 文件中的指令被装入内存后的地址。

4)相对虚拟地址(Relative Virtual Address,RVA)

相对虚拟地址是内存地址相对于映射基址的偏移量。
虚拟内存地址、装载基址、相对虚拟内存地址三者之间有如下关系。
VA= Image Base+ RVA
如图 1.2.2 所示,在默认情况下,一般 PE 文件的 0 字节将对映到虚拟内存的 0x00400000位置,这个地址就是所谓的装载基址(Image Base)。
文件偏移是相对于文件开始处 0 字节的偏移,RVA(相对虚拟地址)则是相对于装载基址 0x00400000 处的偏移。由于操作系统在进行装载时“基本”上保持 PE 中的各种数据结构,所以文件偏移地址和 RVA 有很大的一致性。

虚拟内存及PE文件与虚拟内存之间的映射相关推荐

  1. 谈谈Linux内核物理内存与虚拟内存之间的映射(超详细~)

    1.用户编制程序时使用的地址称为虚地址或逻辑地址,其对应的存储空间称为虚存空间或逻辑地址空间:而计算机物理内存的访问地址则称为实地址或物理地址,其对应的存储空间称为物理存储空间或主存空间. 2.虚拟存 ...

  2. PE文件到内存的映射学习总结

    PE文件到内存的映射 http://www.cnblogs.com/qintangtao/archive/2013/01/28/2880606.html 在执行一个PE文件的时候,windows 并不 ...

  3. PE文件感染和内存驻留

    这次,作者将和大家一起讨论病毒的感染技术.另外,从本文开始,我们将陆续接触到一些病毒的高级编码技术.例如,内存驻留.EPO(入口点模糊)技术.加密技术.多态和变形等.通过这些高级技巧,你将进一步感受到 ...

  4. (理论篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝

    为了快速构建项目,使用高性能框架是我的职责,但若不去深究底层的细节会让我失去对技术的热爱. 探究的过程是痛苦并激动的,痛苦在于完全理解甚至要十天半月甚至没有机会去应用,激动在于技术的相同性,新的框架不 ...

  5. win7瘦身,关闭虚拟内存,页面文件,休眠

    自从WindowsXP开始支持 ACPIAdvanced Configuration and Power Interface 以来,Windows 系统便有一个]叫做休眠的功能.当我们对电脑下达休眠指 ...

  6. 数据共享,内存映射文件和虚拟内存,共享内存

    一.内存映射 内存映射文件允许开发人员预定一块地址空间区域并给区域调拨物理存储器.内存映射文件的物理存储器来自磁盘已有的文件,而不是来自系统的页交换文件.一旦把文件映射到地址空间,就可以对它进行访问, ...

  7. linux增加java内存,linux 使用文件增加虚拟内存 swap

    之前买了个云服务器玩,不过是最低配置的1核1G,后来发现这个内存太小了,随便装几个软件就不行了,内存消耗较大的像 redis 运行起来很多问题. 这些时间了解了下 docker 容器,去尝试了下发现 ...

  8. 实现虚拟内存地址到文件偏移地址的转换

    写在前面:这是一次实践作业,用c来写似乎好写一点,但我比较熟悉python,也找到了python相关的库,就用python来实现下,用一晚上把前天写的代码变成了图形化界面,自学过程中,学到了许多东西, ...

  9. 图解VC++版PE文件解析器源码分析

    该源码下载自 http://download.csdn.net/download/witch_soya/4979587 1 Understand 分析的图表 2 PE结构解析的主要代码简要分析 首先看 ...

最新文章

  1. javascript eval和JSON之间的联系
  2. E. coli Bacterial Assembly 大肠杆菌
  3. Visual Studio 使用 Web Deploy 发布远程站点
  4. CSS DIV Shadow
  5. UPC2018组队训练赛第六场
  6. 【SQL Server中SMO的简单使用】 (装载)
  7. 【论文研读】【医学图像分割】【BCRNN】Fine-grained Recurrent Neural Networks for Automatic Prostate Segmentation ...
  8. Win7删除不常用的自带应用程序
  9. 7. where loop
  10. Python3 函数参数
  11. Get Hardware ID
  12. hisi spi nand flash驱动理解
  13. 颜色匹配 Matlab版本
  14. 笔记本卡顿不流畅是什么原因_电脑卡顿不流畅是什么原因?
  15. Vue3报错:Extraneous non-props attributes (style) were passed to component but could not be automatical
  16. Java POI实现pptpptx转换为pdf文件
  17. 「大冰撸设计模式」java 创建型模式之单例模式
  18. 微信小程序 table表格 PC版本
  19. 深度思考故事1:贴发票和贴海报
  20. 生存分析第一课: censoring 、truncation、survival function、hazard function

热门文章

  1. 面试流程:小天才步步高
  2. 2829: 闯关游戏
  3. C#推流RTMP,摄像头、麦克风、桌面、声卡(附源码)
  4. 四、支付宝支付对接 - SDK开发、业务对接、支付回调、支付组件(2)
  5. 莹石摄像头加密及H265设备播放
  6. 一键安装docker
  7. 如何使用 U8g2 库
  8. BZOJ4521: [Cqoi2016]手机号码
  9. 卧龙吟游戏服务器不显示,关于浏览器无法打开卧龙吟游戏解决方案
  10. 替换war包中的文件