null로 끝나는 문자열의 모든 인스턴스를 프로세스 메모리로 검색하려고합니다. 나는 그때 VirtualQueryEx와 모든 alloced 메모리 영역 바이트 배열로 ReadProcessMemory 그들을 읽고이 너 한테 사용하여 검색 (내가 여기와 저자는 가장 빠른 주장)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;
}
}
그것은 작동하지만 enumed 너무 느립니다. 프로세스를 메모리 맵핑하는 방법이 있습니까? 아니면 어떻게하면 더 빨리 메모리를 검색 할 수 있습니까?
어떻게 해당 지역을 제외 할 수 있습니까? 그런데 그것은 동적 문자열입니다. 실행 파일 실행 후에 할당됩니다. 또한 큰 블록 (현재 검색중인 메모리 영역의 크기)으로 읽는 중입니다. – blez
VirtualQueryEx에서 MEMORY_BASIC_INFORMATION 구조를 확인하고 보호 멤버를 확인하십시오. –
작은 속도 향상. 문자열이 정렬되어 있지 않고 dll을 주입하고 싶지 않으므로 대부분의 바이러스 백신이이를 감지합니다. 멀티 스레드가 내 유일한 희망입니까? – blez