首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi 读取内存数据有关问题

2013-07-16 
delphi 读取内存数据问题,高手进!小弟想写一个连连看外挂,但是读取的内存数据有问题,请高手们给看一下,谢

delphi 读取内存数据问题,高手进!
小弟想写一个连连看外挂,但是读取的内存数据有问题,请高手们给看一下,谢谢
这是程序代码(只写了主要部分)
procedure TForm1.Button1Click(Sender: TObject);
var
WinHandle : hwnd;  //游戏窗口句柄
PidGame :DWORD; //进程ID
hProcess :THandle;
readByte:DWORD; // 实际读取的字节数
ChessData: Array[1..18,1..14] of DWORD;
x,y: DWORD;
str :string;
begin
WinHandle := findwindow(nil,'连连看 v4.92');
GetWindowThreadProcessId(WinHandle,PidGame);
hProcess := OpenProcess(PROCESS_ALL_ACCESS,false,PidGame);
ReadProcessMemory(hprocess,Pointer($12Fa54),@ChessData,252,readByte);
self.Memo1.Text :='';
for x:=1 to 18 do
begin
str :='';
for y:=1 to 14 do str := str+inttostr(ChessData[x][y])+',';
self.Memo1.Lines.add(str);
end;
end;
用这段程序可以读出数据,从12FA54 开始读取,前64个DWORD值是正确的(如下图),从第65个开始的数据就出问题了。下图是CE和我写的程序,读取出的数据,可见,前4行,64个是正确的,这些数据是很有规律的,前面基本都小于20,后面的都是00000000 或者 FFFFFFFF,但读着读着,数据就不对了,这是为什么啊,请帮小弟看看,小弟这箱有礼了,帮助把问题解决的,跪谢!!
delphi 读取内存数据有关问题
另外,窗口句柄和进程ID什么的得到的都是对的,基地址我也换过了,从12FA54开始读,读到12FB34,开始出错的,但是从12FB34开始读,也是能读出4行对的数据,第5行,也就是第65个开始出错。 Delphi 内存 ReadProcessMemory
[解决办法]
ReadProcessMemory(hprocess,Pointer($12Fa54),@ChessData,252,readByte); // 倒数第二个参数是字节数
一个dword 是4个字节,252*4=是1008个字节
应该
ReadProcessMemory(hprocess,Pointer($12Fa54),@ChessData,1008,readByte);
或者
ReadProcessMemory(hprocess,Pointer($12Fa54),@ChessData,sizeof(ChessData),readByte);
[解决办法]
ReadProcessMemory(hprocess,Pointer($12Fa54),@ChessData,252,readByte); // 倒数第二个参数是字节数
读的缓冲区不够。还有最好做下判断 00000000 或者 FFFFFFFF这个数据可能会导致异常 所以前面要先过滤掉。

热点排行