学会用API函数读出内存数据

CheatEngine6.2下载地址

http://download.csdn.net/detail/zang141588761/9600391

将用CE来找出对对碰游戏 坐位号基址,棋盘数组基址并把它读出来

教学目的:学会用API函数读出内存数据
 1、预备知识

   4种数据类型
   字节 Byte=00-FF                           0-255     8bit
   字   WORD   =2Byte= $0000至    $FFFF      0-65535   16bit
   双字 DWORD  =4Byte= $00000000至$FFFFFFFF  0-4294967295   32 bit 
   整型 integer=4Byte=-$80000000至$7FFFFFFF  -2147483648,2147483647  32bit
   游戏基址:就是一个全局变量存放数据的起始地址。
    准备工具 CE (全称Cheat Engine V5.4)
  打开QQ对对碰游戏
    打开内存搜索工具 CE
   
      找坐位号基址: 
      我们搜索在 0-3以内的数值  数值类型选DWORD 双字 


      找对应坐标号 棋盘数组基址:
      我们搜索 棋盘数组的 第一格  数值类型设为 BYTE 字节 




2、编写程序
   3个 API函数
  GetWindowThreadProcessId :获取进程ID 
  OpenProcess              :获取进程句柄     
  ReadProcessMemory        :读出指定进程 指定位置 的数据到缓冲区 
DWORD GetWindowThreadProcessId(
  HWND hWnd,             // 窗口句柄 由FindWindow获取
  LPDWORD lpdwProcessId  // 存放进程ID的 变量
);


HANDLE OpenProcess(
  DWORD dwDesiredAccess,    // PROCESS_VM_READ or PROCESS_VM_WRITE 访问权限
  BOOL bInheritHandle,      // 这个是继承标志 在这里 为false
  DWORD dwProcessId         // 进程ID  由GetWindowThreadProcessId 获取
);
 BOOL ReadProcessMemory(
  HANDLE hProcess,            // 进程句柄 由OpenProcess函数获取
  LPCVOID lpBaseAddress,      // 要读出数据的地址:$47d814
  LPVOID lpBuffer,            // 用于存放读取数据的地址:sitNum
  DWORD nSize,                // 要读出的数据大小  4
  LPDWORD lpNumberOfBytesRead // 读出数据的实际大小 
);
 
具体代码
  //从对对碰程序读出棋盘数据 到棋盘数组里边
const GameName='对对碰角色版'
const sitNumBase= ;
var 
  PidGame :DWORD; //用来保存进程ID
  hGame   :HWND;  //用来保存游戏窗口句柄
  readByte:DWORD; //用来保存 实际读取的字节数
  ChessData:Array[1..8,1..25] of byte;  //定义的一个棋盘数组
 //4个棋盘基址号
  var  sitBase:array[0..3] of ^integer=(Pointer($0047A318),Pointer($0047AEF4),
                                     Pointer($0047BAD0),Pointer($0047C6AC)); 


Function UpDataChess():boolean;      
begin
     //获取游戏窗口句柄
    hGame:=Findwindow(nil,GameName);
    //获取游戏进程 PID
    windows.GetWindowThreadProcessId(hGame,PidGame) ;
    //获取游戏进程句柄
    hProcess:=windows.OpenProcess(windows.PROCESS_ALL_ACCESS,false,PidGame);  
    //读出当前坐位号
    windows.ReadProcessMemory(hProcess,Pointer(sitNumBase),sitNumP,4,readByte);
    //读出棋盘数据到数组
    windows.ReadProcessMemory(hProcess,sitBase[sitNum],@ChessData[1][1],200,readByte);
    //释放进程句柄 
   result:=CloseHandle(Hprocess);
end;
                                           
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蚂蚁_CrkRes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值