请高手查错指点..谢谢!!
我照一个文章做了以下代码查一个指定程序的基址,但一查就没有响应,请问是不是哪里错了!?
具体应该怎么做!??
procedure TForm1.Button1Click(Sender: TObject);
var
P : Pointer;
MemInfo : MEMORY_BASIC_INFORMATION;
MemSize : LongWord;
ProHWND : HWND;
begin
ProHWND := OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);
P := nil;
MemSize := SizeOf(MemInfo);//这一句不明白为什么这么做
while LongWord(p)<$80000000 do//这是查小于2G的内存吧
begin
if MemSize<>VirtualQueryEx(ProHWND,P,MemInfo,MemSize) then break;
Memo1.Lines.Add(string(MemInfo.AllocationBase));//我用这显示查得的基址不知道这样对不对
end;
end;
end.
问题点数:100、回复次数:14Top
1 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2004-12-03 21:30:19 得分 10
不是这样的方法!
用PSAPI或ToolHelp的API就能获得!
记得是查找EXE的hModule就是了
http://lysoft.7u7.netTop
2 楼xiyixiaowm50(独孤求败)回复于 2004-12-03 22:47:02 得分 0
晕死,while LongWord(p)<$80000000 要这样用的话得多长时间才能返回呀?
Top
3 楼jiangmenghen(江梦痕)回复于 2004-12-04 05:00:20 得分 0
请问这样的方法不行那我到底得怎么做??
Top
4 楼surpassable()回复于 2004-12-07 09:19:04 得分 0
帮你顶~
顺便学习Top
5 楼IwantFlay(小飞)回复于 2004-12-07 09:21:56 得分 0
dingTop
6 楼dgyanyong(幸运飞龙)回复于 2004-12-08 22:16:39 得分 0
upTop
7 楼zhksoft()回复于 2004-12-10 09:47:13 得分 0
ProHWND := OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);
ProcessID你没指定呀。
Top
8 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2004-12-10 09:51:53 得分 90
先 獲得ProcessID 然後 用VirtualQueryEx獲得進程的基址Top
9 楼jiangmenghen(江梦痕)回复于 2004-12-10 14:07:14 得分 0
ProcessID 我在另外代码中获取了~~就是这个 VirtualQueryEx 不知道怎么弄!!!!
写内存 取内存数据我都可以实现!!Top
10 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2004-12-10 15:07:14 得分 0
DWORD VirtualQueryEx(
HANDLE hProcess, // handle to process
LPCVOID lpAddress, // address of region
PMEMORY_BASIC_INFORMATION lpBuffer,
// address of information buffer
DWORD dwLength // size of buffer
);
hProcess: THandle;
lpAddress: Pointer;
mbi: TMemoryBasicInformation;
dwLength: DWORD;
VirtualQueryEx(hProcess, lpAddress, mbi, dwLength);
其中
lpAddress, mbi為返回值....
Top
11 楼surpassable()回复于 2004-12-10 15:41:05 得分 0
学习,学习~~~~~~Top
12 楼jiangmenghen(江梦痕)回复于 2004-12-11 15:16:56 得分 0
我这样到底哪错了???? 怎么显示出来总不是想要的~
var
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
Ret : BOOL;
ProcessID : integer;
ProcessHndle : THandle;
s,y:string;
lpAddress:Pointer;
mbi:TMemoryBasicInformation;
dwLength:DWORD;
begin
FSnapshotHandle:=CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
Ret:=Process32First(FSnapshotHandle,FProcessEntry32);
y:='1.exe';
while Ret do
begin
s :=ExtractFileName(FProcessEntry32.szExeFile);
if s=y then
begin
ProcessID:=FProcessEntry32.th32ProcessID;
s:='';
break;
end;
Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
ProcessHndle:=OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);
VirtualQueryEx(ProcessHndle,lpAddress, mbi, dwLength);
Memo1.Lines.Add(IntToStr(Longint(@mbi.AllocationBase)));
Memo1.Lines.Add(IntToStr(Longint(@lpAddress)));
CloseHandle(ProcessHndle);
end;Top
13 楼maodelphi(小游)回复于 2004-12-11 18:01:36 得分 0
欢迎广大Delphi程序员到《delphi专题研讨会》到QQ群7568683
讨论Top
14 楼jyassassin(蓝血人)回复于 2004-12-13 16:35:02 得分 0
学习.Top




