function TForm1.intncnr(addncnr:longint;rnd:integer):longint;
var
Num :cardinal;
mNum :integer;
pHandle: Thandle; //很重要
begin
pHandle:= OpenProcess(PROCESS_ALL_ACCESS,false,pid);//获得进程句柄
if pHandle <> 0 then
ReadProcessMemory(pHandle, Pointer(addncnr), Pointer(@mNum), rnd, Num);
CloseHandle(pHandle); //关闭句柄释放内存
result :=mNum; end; 调用方法
ShowMessage(inttostr(intncnr(intncnr(intncnr($041171c,4)+$0,4)+$c,1))); 最后提示应该返回1字节的数字为什么总是返回的4字节的数字呢?
var
Num :cardinal;
mNum :integer;
pHandle: Thandle; //很重要
begin
pHandle:= OpenProcess(PROCESS_ALL_ACCESS,false,pid);//获得进程句柄
if pHandle <> 0 then
ReadProcessMemory(pHandle, Pointer(addncnr), Pointer(@mNum), rnd, Num);
CloseHandle(pHandle); //关闭句柄释放内存
result :=mNum; end; 调用方法
ShowMessage(inttostr(intncnr(intncnr(intncnr($041171c,4)+$0,4)+$c,1))); 最后提示应该返回1字节的数字为什么总是返回的4字节的数字呢?
var
Num :cardinal;
mNum :integer;
pHandle: Thandle; //很重要
begin
mNum:=0;
pHandle:= OpenProcess(PROCESS_ALL_ACCESS,false,pid);//获得进程句柄
if pHandle <> 0 then
ReadProcessMemory(pHandle, Pointer(addncnr), Pointer(@mNum), rnd, Num);
CloseHandle(pHandle); //关闭句柄释放内存
result :=mNum; end; 就这样就行了?
这里Pid都没有赋值,函数返回的都不是读取内存的数据,除非pid是全局变量
读内存前先给赋值mNum:=0; 是正确的。