根据书上内容,觉得
内存使用大概需要4步
1.启动进程,得到虚拟地址空间(4G)
2.在虚拟地址空间的用户模式分区保留一块区域
3.分配一块物理内存
4.把这块物理内存映射到保留的那块区域
5.关于内存映射文件,书上说exe、dll就是内存映射文件
问题:
1。上述理解是否准确?
2。把这块物理内存映射到保留的那块区域,是啥意思?
3。exe、dll是内存映射文件,好像是因为.exe在执行时,系统将把磁盘上的.exe本身当作
   分配给它的物理内存,那么是否可以认为:所有exe在执行时,第一次访问其虚拟地址空间
   的数据时,一定是‘页面失效’的。而后再分配ram,然后再从页面文件(也就是.exe)
   把数据拷入ram...
4。如果3成立,那么ram内容修改了,ram内容可能会写回页面文件(即.exe文件本身)
   那么岂不是.exe也被修改了?
5。祝大家新的一年万事如意!

解决方案 »

  1.   

    3。exe、dll是内存映射文件,好像是因为.exe在执行时,系统将把磁盘上的.exe本身当作
       分配给它的物理内存,那么是否可以认为:所有exe在执行时,第一次访问其虚拟地址空间
       的数据时,一定是‘页面失效’的。而后再分配ram,然后再从页面文件(也就是.exe)
       把数据拷入ram...
    4。如果3成立,那么ram内容修改了,ram内容可能会写回页面文件(即.exe文件本身)
       那么岂不是.exe也被修改了?
    ------------------------------------
    3基本是对的,因为exe在运行时,大多数数据是在虚拟内存中的,只有部分在物理内存中
    ram中的内容也会写回,但是这些操作需要的数据并不是exe本身的数据而是exe在执行时需
    要用到的数据,它可以被强行修改,但是修改不会影响exe本身,只是会影响exe的运行
      

  2.   

    exe访问的数据空间和自身空间分割开了的
      

  3.   

    这些应该是操作系统上的知识.游戏修改工具修改别的程序时不要求被修改的程序的数据一定在物理内存中(交换到硬盘上的也可),
    从编程来看调用ReadProcessMemory/Write函数时提供进程句柄和线性地址,操作系统会将线性
    地址转化成物理地址(当然如果被交换到硬盘上,他会装入)
      

  4.   

    exe、dll是映射为只读,如果对他修改为出错
    另外金山游侠他有一个驱动,他在操作系统内核里运行,这样他就有了改别的进程的权限
      

  5.   

    2。把这块物理内存映射到保留的那块区域,是啥意思?
      分配的物理内存远小于虚拟内存。所以要映射到那块区域3。exe、dll是内存映射文件,好像是因为.exe在执行时,系统将把磁盘上的.exe本身当作
    分配给它的物理内存,那么是否可以认为:所有exe在执行时,第一次访问其虚拟地址空间
    的数据时,一定是‘页面失效’的。而后再分配ram,然后再从页面文件(也就是.exe)
    把数据拷入ram...   如果你有相当高的权限,当然可以。4。如果3成立,那么ram内容修改了,ram内容可能会写回页面文件(即.exe文件本身)
       是的。
    5、接了,谢谢