b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

虚拟内存与物理内存的联系图的工作原理及应用

电脑杂谈  发布时间:2021-02-13 16:02:15  来源:网络整理

主要用于单人游戏。它从操作系统级别解释了如何做到这一点。

图1显示了特定一代记忆棒的硬件。处理CPU的任何硬件部分都通过其自己的控制芯片进行通信,以完成读写操作。图1是其中的。有关详细信息,请参阅参考。

单机游戏内存修改器

图1.特定一代记忆棒的硬件

记忆棒将由操作系统作为资源接管,并将被分为几页,也称为页面框架。页面框架可以加载不同的页面框架。将一段代码编译成可执行文件K后,K文件的结构将包含所有必需的信息。当操作系统将其加载到内存中时,操作系统会为其配置相关资源。这些资源包括分配给它的页面框架信息。这时,有图2、图3(供参考)。

关于虚拟内存物理内存之间的连接

单机游戏内存修改器_内存修改器修改游戏自动退出_flash游戏内存修改

单机游戏内存修改器

图2.虚拟内存和物理内存之间的连接

页面表的工作原理如下图所示

单机游戏内存修改器

图3.页表如何工作

过程控制块和可执行文件

过程控制块,有关详细信息,请参阅:本链接博客文章的第2部分的介绍。

可执行文件,以exe文件为例。该exe文件更加复杂,属于多段结构。它是DOS最成功,最复杂的设计之一。要了解exe文件,首先需要了解exe文件的文件头结构。每个exe文件都包含一个文件头和一个可重定位程序的图像。文件头包含MS-DOS用来加载程序的信息,例如程序的大小和寄存器的初始值。文件头还指向重定位表,该表包含指向程序映像中可重定位段的地址的指针的链接列表。有关详细信息,请参阅。

游戏修饰符的原理

从PCB的代码段开始,将过程的所有相关信息记录在结构对象中。如果进程需要能够相互访问,则操作系统需要提供相应的方法以允许不同的进程相互访问。 game修改器修改游戏,可以理解为:一个进程访问并修改另一个进程的内存空间,因此您只需要知道操作系统提供的进程数据访问方法即可修改数据,如图所示。 4.图1-6显示了大约的数据访问和修改步骤。

单机游戏内存修改器

图4独立游戏修改器的数据修改原理

内存修改器修改游戏自动退出_单机游戏内存修改器_flash游戏内存修改

模拟代码:

//--------------------------------------------------------------------------// 
    HWND hWnd =::FindWindow("CRHClass",NULL); //得到窗口句柄 
    if(hWnd ==FALSE) 
        MessageBox("游戏没有运行!"); 
    else 
    { 
      GetWindowThreadProcessId(hWnd,&hProcId); // 从窗口句柄得到进程ID 
      HANDLE nOK =OpenProcess(PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATION|PROCESS_VM_READ|
                            PROCESS_VM_WRITE,FALSE,hProcId);  //打开进程并得到读与权限 
      if(nOK ==NULL) 
          MessageBox("打开进程时出错"); 
      else 
      { 
                          //0047EB17 
          WriteProcessMemory(nOK,(LPVOID)0x0047EB17,&A1,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x0047EB18,&A2,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x0047EB19,&A3,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x0047EB1A,&A4,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x0047EB1B,&A5,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x0047EB1C,&A6,1,NULL); 
                          //00506950 
          WriteProcessMemory(nOK,(LPVOID)0x00506950,&B1,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x00506951,&B2,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x00506952,&B3,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x00506953,&B4,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x00506954,&B5,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x00506955,&B6,1,NULL); 
                          //第二句 
          WriteProcessMemory(nOK,(LPVOID)0x00506956,&C1,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x00506957,&C2,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x00506958,&C3,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x00506959,&,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x0050695A,&C5,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x0050695B,&C6,1,NULL); 
                          //最后一句 
          WriteProcessMemory(nOK,(LPVOID)0x0050695C,&D1,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x0050695D,&D2,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x0050695E,&D3,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x0050695F,&D4,1,NULL); 
          WriteProcessMemory(nOK,(LPVOID)0x00506960,&D5,1,NULL); 
          CloseHandle(nOK); //关闭进程句柄 
      } 
    } 
} 
/
                    //读取并修改内力值 
DWORD  hProcId; 
    HWND hWnd =::FindWindow("CRHClass",NULL); 
    if(hWnd ==FALSE) 
        MessageBox("No"); 
    else 
    { 
      GetWindowThreadProcessId(hWnd,&hProcId); 
      HANDLE nOK =OpenProcess(PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATION|PROCESS_VM_READ|
                            PROCESS_VM_WRITE,FALSE,hProcId); 
      if(nOK ==NULL) 
          MessageBox("ProcNo!"); 
      else 
      { 
          DWORD buf1; 
          DWORD write; 
          BOOL OK=ReadProcessMemory(nOK,(LPCVOID)0x00506961,(LPVOID)&buf1,4,NULL); //读取我们保存EDX中的基础 
          if(OK ==TRUE) 
          { 
            write =buf1+0x000003F4;  //得到内力值的地址 
            DWORD Writeed =0x00; //要修改的数值 
            BOOL B =WriteProcessMemory(nOK,(LPVOID)write,&Writeed,1,NULL); 
            if(B==FALSE) 
                MessageBox("WriteNo"); 
          } 
      } 
          CloseHandle(nOK); 
    } 

其他游戏修改器类型

1、动作样式,所谓的动作样式是指使用API​​向窗口发送命令或使用API​​控制鼠标,键盘等,以便游戏中的角色可以移动或攻击。可以通过脚本软件直接开发。非常简单。

2、加速,这种插件修改时钟频率以加快速度。具体要添加。

3、数据包类型,这种插件首先拦截数据包,分析应用程序层协议,然后对其进行修改,然后转发。它适用于大多数游戏,例如WPE,并且某些游戏插件是以这种方式编写的。涉及apihook技术,winsock技术等。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-356769-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...