这2天学习查内存地址,搞的头昏脑涨。
所用工具:
金山游侠,GM,江湖行
我只是想用它们简单的查一下游戏的HP,MP,坐标XY的内存地址,可是每个工具查出来的地址都有N个,我都晕。面对查出来的上百个地址,哪个才是我需要的? 还有,查出来的结果还分什么单字节,双字节,四字节,文本等,搞得我更是一头露水。 一个内存地址不就对应的存一个数据吗?搞那么罗嗦的? 好不容易用金山游侠找到一个只有一个地址的(找:13106),读出来的值是双字节的位置。
地址 单字节 双字节 四字节 浮点数 字符串
$0045E260 [50] [13106] [0892313426] [0.000001] 2345111 我写了一段代码去读这个地址://从内存中读取数据
function Get_Data:integer;
var
pid: dword;
h: THandle;
tt: Cardinal;
lpBuffer:pByte;
nSize: DWORD;
lpNumberOfBytesRead: DWORD;
addr:dword;
begin
nSize:=4;
lpBuffer:=AllocMem(nSize);
addr:= $0045E260;
GetWindowThreadProcessId(GameHandle, @pid);//GameHandle是个全局变量,前面的程序已经得到游戏的Handle。
h := OpenProcess(PROCESS_ALL_ACCESS, false, pid);
if h <> 0 then
begin
ReadProcessMemory(h,Pointer(addr),lpBuffer,nSize,lpNumberOfBytesRead);
result:= lpBuffer^;
end;
MessageBeep(0);
CloseHandle(h);
end;但是只能读到单字节的数据(50),晕了。
怎么才能读出13106?
所用工具:
金山游侠,GM,江湖行
我只是想用它们简单的查一下游戏的HP,MP,坐标XY的内存地址,可是每个工具查出来的地址都有N个,我都晕。面对查出来的上百个地址,哪个才是我需要的? 还有,查出来的结果还分什么单字节,双字节,四字节,文本等,搞得我更是一头露水。 一个内存地址不就对应的存一个数据吗?搞那么罗嗦的? 好不容易用金山游侠找到一个只有一个地址的(找:13106),读出来的值是双字节的位置。
地址 单字节 双字节 四字节 浮点数 字符串
$0045E260 [50] [13106] [0892313426] [0.000001] 2345111 我写了一段代码去读这个地址://从内存中读取数据
function Get_Data:integer;
var
pid: dword;
h: THandle;
tt: Cardinal;
lpBuffer:pByte;
nSize: DWORD;
lpNumberOfBytesRead: DWORD;
addr:dword;
begin
nSize:=4;
lpBuffer:=AllocMem(nSize);
addr:= $0045E260;
GetWindowThreadProcessId(GameHandle, @pid);//GameHandle是个全局变量,前面的程序已经得到游戏的Handle。
h := OpenProcess(PROCESS_ALL_ACCESS, false, pid);
if h <> 0 then
begin
ReadProcessMemory(h,Pointer(addr),lpBuffer,nSize,lpNumberOfBytesRead);
result:= lpBuffer^;
end;
MessageBeep(0);
CloseHandle(h);
end;但是只能读到单字节的数据(50),晕了。
怎么才能读出13106?
function Get_Data:integer;
var
pid: dword;
h: THandle;
tt: Cardinal;
nSize: DWORD;
lpNumberOfBytesRead: DWORD;
addr:dword;
begin
nSize:=4;
addr:= $0045E260;
GetWindowThreadProcessId(GameHandle, @pid);//GameHandle是个全局变量,前面的程序已经得到游戏的Handle。
h := OpenProcess(PROCESS_ALL_ACCESS, false, pid);
if h <> 0 then
ReadProcessMemory(h,Pointer(addr),@Result,nSize,lpNumberOfBytesRead);
MessageBeep(0);
CloseHandle(h);
end;