如何提高ReadProcessMemory从内存中找数的速度
编号:QA002982
建立日期: 2000年5月29日 最后修改日期:2000年5月29日
所属类别:
Q
lj:
操作系统:pwin98
编程工具:delphi5
问题:有如下一段程序:
I:=$00040000;
while I<=$7FFFFFFF do
begin
ReadProcessMemory(
ProcessHndle,
Pointer(i),
lpBuffer,
4,
lpNumberOfBytesRead
);
if lpBuffer^=Value1 then ListBox1.Items.Add(inttohex(lpBuffer^,8));
inc(I,4);
end;
主要是用于找出某个值的地址,但运行时发现它的速度仅为 10kbytes/秒 左右,有办法提高它的速度吗?FPE之类的工具速度极快,不知道它是什么原理?多谢指教!
水平: 中级
A回答:
你可以利用ReadProcessMemory函数一次读出整个区域中的内容而不必要一个字一个字的读取。下面是范例:
type lpREC=^lREC;
lREC=record
ls:array[0..20000] of LongWord
end;
Value1:=$44;
ReadProcessMemory(Application.Handle,Pointer(i),lpWord,80000,iRead);
For i:=0 to 2000 do
if lpWord.ls[i]=Value1 then
ListBox1.Items.Add(inttohex(lpWord.ls[i],8));
上面的范例可以一次读取20000个LongWord然后进行比较然后在ListBox1中显示。
http://www.applevb.com/
此问题由Chen回答。
附加关键字:编程, 源程序, programming, source code, Delphi, VCL, Borland, Windows API, win32, api, windows api, gdi32, kernel。
| |
|
|
| |
|
|