欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

关于扫雷程序的内存地址读取问题

关于扫雷程序的内存地址读取问题

有两段代码:
BOOL b;
  b=ReadProcessMemory(
    ph,   // 目标进程句柄
    (void*)0x01005360,//要读取的内存地址
    lpBuffer1,  // 存放数据的缓存区地址
    1024,      // 要读取的字节数
    NULL  // 把读了多少个字节存到一个地址,如果为NULL则忽略此参数。
    );
 b=ReadProcessMemory(//获取扫雷区域行列数
    ph,   // 目标进程句柄
    (void*)0x01005334,//要读取的内存地址
    lpBuffer2,  // 存放数据的缓存区地址
    8,      // 要读取的字节数
    NULL
    );
根据之前的资料说:1005334  里面是横向方格数
                                    1005338  里面是纵向方格数
那第一个ReadProcessMemory的作用是什么?为什么要读取1024个字节?
那第二个ReadProcessMemory的作用说是获取扫雷区域行列数,起始地址也是01005334但是为什么要
读取8个字节?那不是要读01005334-01005342的数据?这又是为什么?
下面是源码:
CWnd* wn;
  void* ph;
  DWORD pid;
  wn = FindWindow(NULL,"扫雷");
  
  if(!wn)
  {
    MessageBox("大哥,请你先打开windows自带的扫雷游戏!");
    return;
  }
  
  GetWindowThreadProcessId((HWND__ *)(*wn),&pid);
  ph=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
  
  void *lpBuffer1=new byte[1024];
  BOOL b;
  b=ReadProcessMemory(
    ph,   // 目标进程句柄
    (void*)0x01005360,//要读取的内存地址
    lpBuffer1,  // 存放数据的缓存区地址
    1024,      // 要读取的字节数
    NULL  // 把读了多少个字节存到一个地址,如果为NULL则忽略此参数。
    );
  if(!b)
  {
    MessageBox("读取内存错误,有可能与你的杀毒软件相冲突!");
    return;
  }
  void *lpBuffer2=new byte[8];
  b=ReadProcessMemory(//获取扫雷区域行列数
    ph,   // 目标进程句柄
    (void*)0x01005334,//要读取的内存地址
    lpBuffer2,  // 存放数据的缓存区地址
    8,      // 要读取的字节数
    NULL
    );
  if(!b)
  {
    MessageBox("读取内存错误,有可能与你的杀毒软件相冲突!");
    return;
  }
  int *aa=(int *)lpBuffer2;
  byte *bb=(byte *)lpBuffer1;
  
  
  for(int y=0;y<aa[1];y++)
  {
    for(int x=1;x<=aa[0];x++)
    {
      if(bb[x+(y*32)]==0x8f)
      {//右键
        ::SendMessage((HWND__ *)(*wn),WM_RBUTTONDOWN,0,(0x00400000+(y*0x00100000))|(0x0010*x));
        ::SendMessage((HWND__ *)(*wn),WM_RBUTTONUP,0,(0x00400000+(y*0x00100000))|(0x0010*x));
      }
      else
      {//左键
        ::SendMessage((HWND__ *)(*wn),WM_LBUTTONDOWN,0,(0x00400000+(y*0x00100000))|(0x0010*x));
        ::SendMessage((HWND__ *)(*wn),WM_LBUTTONUP,0,(0x00400000+(y*0x00100000))|(0x0010*x));
      }
      
    }
  }

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功