怎样通过程序读内存地址中的值?

怎样通过程序读内存地址中的值?,第1张

不能这样读,你读的内存具有保护属性,产生了非法访问。

如果要读其他进程的内存数据,可以调用WINDOWS API 函数ReadProcessMemory

当然,读取的内存必须具有可读的属性。

步骤大致是:

先找窗口句柄,再通过句柄打开进程,就可以直接读了,有的可能有读写保护之类的,就还要提升访问权限了,发个示例代码你参考下:

var

h : HWND

PId : hwnd

hProcess : Cardinal

num : Cardinal

x : pinteger

dwErr : dword

begin

h := FindWindow(nil,'testMem')

if h = 0 then

exit

GetWindowThreadProcessId (h, @pid)

hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, pid)

if hProcess = 0 then

exit

getmem(x,4)

if ReadProcessMemory(hprocess,Pointer($00D43810),x,4,num) then

begin

messagebox(0,pchar(inttostr(x^)),'d',0)

end

else

begin

dwErr := getLastError

messagebox(0,pchar(inttostr(dwerr)),'d',0)

end

freemem(x)

closehandle(hProcess)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11214241.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存