プロセスのメモリで null で終わる文字列のすべてのインスタンスを検索しようとしています。割り当てられたすべてのメモリ領域を VirtualQueryEx で列挙し、次に ReadProcessMemory でそれらをバイト配列に読み取り、このアルゴリズムを使用して検索します (ここで見つけたもので、著者は最速であると主張しています)。
public static unsafe List<long> IndexesOf(byte[] Haystack, byte[] Needle) {
List<long> Indexes = new List<long>();
fixed (byte* H = Haystack) fixed (byte* N = Needle) {
long i = 0;
for (byte* hNext = H, hEnd = H + Haystack.LongLength; hNext < hEnd; i++, hNext++) {
bool Found = true;
for (byte* hInc = hNext, nInc = N, nEnd = N + Needle.LongLength; Found && nInc < nEnd; Found = *nInc == *hInc, nInc++, hInc++) ;
if (Found) Indexes.Add(i);
}
return Indexes;
}
}
動作しますが、遅すぎます。プロセスをメモリマップする方法や、メモリ内をより高速に検索する方法はありますか?