首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi ReadProcessMemory问题

Delphi ReadProcessMemory问题
EN

Stack Overflow用户
提问于 2011-01-25 11:33:55
回答 1查看 1.5K关注 0票数 1

它读取的前3个地址是正确的,最后一个wrong...Ignore垃圾代码我是菜鸟,我只是不明白为什么第4个地址,无论如何,即使我使用相同的地址作为其他之一返回错误的值…

代码语言:javascript
复制
procedure ReadFirstCard(Address: Integer);
var
Handle,i,a,b,c : Integer;
begin
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId);
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
ReadProcessMemory(Handle, Ptr(Address), @NewValue, Data, CardRead);
CloseHandle(Handle);
end;

procedure ReadFirstCardSuit(Address2: Integer);
var
Handle,i,a,b,c : Integer;
begin
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId);
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
ReadProcessMemory(Handle, Ptr(Address2), @NewValue2, Data2, CardRead2);
CloseHandle(Handle);
end;

procedure ReadSecondCard(Address3: Integer);
var
Handle,i,a,b,c : Integer;
begin
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId);
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
ReadProcessMemory(Handle, Ptr(Address3), @NewValue3, Data3, CardRead3);
CloseHandle(Handle);
end;

procedure ReadSecondCardSuit(Address4: Integer);
var
Handle,i,a,b,c : Integer;
begin
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId);
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
ReadProcessMemory(Handle, Ptr(Address4), @NewValue4, Data4, CardRead4);
CloseHandle(Handle);
end;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-25 12:20:00

由于第四个函数唯一的不同之处在于它使用Data4而不是通过Data3使用Data1作为大小,因此Data4似乎不能有正确的从目标进程复制的字节数的值。确保NewValue4足够大,也可以接收整个结果。

您没有检查这些API函数的返回值,所以如果它们失败了,您永远不会知道。确保OpenProcess返回有效的句柄,并确保ReadProcessMemory返回非零值。如果他们没有,打电话给GetLastError找出原因。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4789721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档