我正在尝试在进程的内存中搜索以空字符结尾的字符串的所有实例。我用 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;
}
}
它有效,但它太慢了。有没有办法对进程进行内存映射或以某种方式在其内存中更快地搜索?