delphi如何获取另一程序的内存镜像基址(00400000这个地址)
不注入如何实现可能没有说清楚,不是要读取程序内存地址的值,而是要读取程序的内存地址就像图片画红框里的那个内存镜像地址...
不注入如何实现
可能没有说清楚,不是要读取程序内存地址的值,而是要读取程序的内存地址
就像图片画红框里的那个内存镜像地址 展开
可能没有说清楚,不是要读取程序内存地址的值,而是要读取程序的内存地址
就像图片画红框里的那个内存镜像地址 展开
1个回答
展开全部
步骤大致是:
先找窗口句柄,再通过句柄打开进程,就可以直接读了,有的可能有读写保护之类的,就还要提升访问权限了,发个示例代码你参考下:
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);
先找窗口句柄,再通过句柄打开进程,就可以直接读了,有的可能有读写保护之类的,就还要提升访问权限了,发个示例代码你参考下:
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);
追问
可能没理解我的意思
我要的是读取另一程序的内存镜像地址(比如XP系统的为00400000这个地址),而不是另一程序内存地址的值
追答
知道你意思了,有几个API可能是你要用到的,但这个具体我没做过,不能很好的组织
Toolhelp32ReadProcessMemory
GetModulePreferredBaseAddr
在 tlhelp32 单元已经封装好了,可以直接用
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询