热情软件屋

 

如何提高ReadProcessMemory从内存中找数的速度


编号:QA002982
建立日期: 2000年5月29日 最后修改日期:2000年5月29日
所属类别:

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之类的工具速度极快,不知道它是什么原理?多谢指教!
    水平: 中级

回答:

    你可以利用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

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio