function ArraySearch(StartAddy, EndAddy, SearchBuf: Pointer; BufLen: DWORD): Pointer; stdcall; var blobLen: DWORD; blob: DWORD; i, Max: DWORD; A, B: DWORD; X: Byte; begin Result := nil; if DWORD(EndAddy) <= DWORD(StartAddy) then Exit; blobLen := DWORD(EndAddy) - DWORD(StartAddy); blob := DWORD(StartAddy); Max := blobLen - BufLen; for i := 0 to Max do begin A := 0; B := i; try X := PByte(blob+B)^; except X := PByte(SearchBuf)^+1; end; while (X = PByte(DWORD(SearchBuf)+A)^) do begin A := A + 1; B := B + 1; try X := PByte(blob+B)^; except X := PByte(DWORD(SearchBuf)+A)^+1; end; end; if (A = BufLen) then begin Result := PByte(blob+B-BufLen); Exit; end; end; end;