虚拟内存的实现方法和过程

  1. 当一个应用程序执行时,操作系统就会创建一个进程,并给该进程分配2GB的虚拟地址(不是内存,知识地址)
  2. 虚拟内存地址管理器将应用程序的代码映射到那个应用程序的虚拟地址的某个位置,并把当前需要的代码读入物理地址
  3. 如果使用DLL,DLL也会被映射到进程的虚拟地址空间中,在需要的时候才会被读入物理内存
  4. 其他项目(数据,堆栈等)的空间是从物理内存中分配的,并映射到虚拟地址空间中
  5. 应用程序通过使用其虚拟地址空间中的地址开始执行。然后,虚拟内存管理器把每次内存访问到物理位置

总的来说:

  • 应用程序不会直接访问物理地址
  • 虚拟内存管理器通过虚拟地址的访问请求来控制所有的物理地址访问
  • 每个应用程序都有独立的4GB寻址空间,不同应用程序的地址空间是彼此隔离的
  • DLL程序没有“私有”空间,他们总是被映射到其他应用程序的地址空间中,作为其他应用程序的一部分运行。其原因是:如果DLL不与其他应用程序处于同一个地址空间,应用程序就无法调用它

使用虚拟内存的好处是:简化了内存的管理,弥补了物理内存的不足,可以防止多任务环境下应用程序之间的冲突。

你可能感兴趣的:(逆向,windows)