私はメモリスキャナで作業していますが、スキャンが非常に遅いです。誰でも助けてくれますか?私は、私は新しいページを必要とするまで、別の4096バイトのページを取得し、その後、メモリのものを保存する時に4096本のバイトのページを読む必要があり、その上で操作を行うことを学んできた 低速スキャンのメモリスキャナ
procedure FirstScan(scantype, scanvalue: string);
var
value :integer;
dwEndAddr : dword;
i:dword;
mbi : TMemoryBasicInformation;
begin
while (VirtualQuery(Pointer(DWORD(mbi.BaseAddress) + MBI.RegionSize), MBI, SizeOf(MEMORY_BASIC_INFORMATION))=SizeOf(TMemoryBasicInformation)) do begin
if (MBI.State = MEM_COMMIT) and (MBI.Protect = PAGE_READWRITE) then begin
dwEndAddr := DWORD(mbi.BaseAddress) + MBI.RegionSize;
for i := DWORD(MBI.BaseAddress) to (dwEndAddr - 1 - sizeof(DWORD)) do begin
Application.ProcessMessages;
try
if scantype = '1 Byte' then begin
value := PBYTE(i)^;
if scanvalue = IntToStr(value) then ListBox1.Items.Add(IntToHex(i,8));
end;
//others scantypes here...
except
Break;
end;
end;
end;
end;
end;
...
しかし私はそれをどうすればいいのか分かりません...
誰でも助けてくれませんか?コードはCまたはC++にすることができます...
質問が本当に「なぜこの特定のコードが遅いのですか?」代わりにhttp://codereview.stackexchange.comに持って行きましょう。あなたの質問があまりにもローカライズされて、Stack Overflowに関する一般的な興味があるからです。しかし、あなたの質問がちょうど一般的な場合、「どのように私は任意の遅いコードをより速くするのですか?代わりにそれを直接求めてください。 –
mbi.BaseAddressおよびMBI.RegionSizeは、VirtualQuery()への入力時に未定義 - 未初期化のスタックデータです。 –