我看了一个delphi扫雷外挂程序的源代码,里面注明$010052C4是win2000下的雷数起始地址(//$010052C4  2K下是雷数起始地址),还请大虾解疑,在此谢谢了!
$010052C4是物理地址,还是逻辑地址?该地址如何得到?
听说程序运行时是由内存管理模块动态分配一块内存给程序运行的,为何指到雷数起始地址被固为$010052C4?

解决方案 »

  1.   

    不是物理地址啊。是偏移地址。应该是雷 数据所在内存地址 相对于 扫雷这个进程 的地址的偏移地址;如果扫雷进程的地址是 XXXXXX,那么 雷数据所在地址就是 XXXXXX+$010052C4 ;
      

  2.   

    便宜地址,同时借楼主宝地一用,兄弟们都帮看看吧:
    http://expert.csdn.net/Expert/topic/2971/2971583.xml?temp=.3563196
      

  3.   

    物理地址:物理内存的地址
    逻辑地址:Windows下叫线性地址,就是虚拟地址,分为为低2G(用户态)和高2G(核心态)每个进程都由4G空间的虚拟地址虚拟地址可以向物理地址转换的更详细的看X86的开发手册,Intel.com可以下载的
      

  4.   

    也可能是个RVA(相对虚拟地址)。
       这一点就要看具体文件源数据,如果是个RVA,那么你可以将其转换成文件的偏移地址;如果是个偏移,那你可以加上该段的RAW指针,得出的结果就是从文件开始处的偏移,在该偏移处就是具体数据。
       个人愚见!仅供参考
      

  5.   

    此地址为逻辑地址(虚拟内存中的地址)或线性地址,WIN2K,XP,98都采用4G的虚拟内存,程序代码、数据等由系统在必要的时候动态映射到物理内存中。如果是物理地址,那么每次调用扫雷程序 系统为该变量动态分配的物理内存都是不一样的。从你给的地址来看它是固定的,只有逻辑地址才会出现这种全局变量有固定地址的特性(无论它是系统中出现的第几个进程,全局变量的虚拟地址都是固定的)。检查方法:你用金山游侠(网上下载)定位到010052C4H地址下,修改该地址下内存值,修改后锁定该地址。如果雷数改变那肯定是逻辑地址,如果不是那可能是数据段偏移地址(这种地址在老游戏中也是固定的),不过可能性很小,这种小游戏不会有16M的数据。肯定不是物理内存!
      

  6.   

    有机会去看看《window 2000核心编程》