Hier ist eine Funktion von mir die im Speicher Daten sucht!
Mein Problem ist das Result (Array of Pointer).
Bei jedem SetLength Befehl wird der Array geleert, dies habe ich über einen kleinen Umweg bewältigt, nur das gefällt mir nicht so richtig!
Ich komm einfach nicht drauf wie ich das best möglich mit dynamischen Arrays hinkriege, das nach dem aufrufen der Funktion Length u. Inhalt des Arrays korrekt sind.
Hier mein Code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| type PointerArray = Array of Pointer;
function SearchInMemory(Source:Pointer; SourceLen:Integer; Data:Pointer; DataLen: Integer):PointerArray; var SourceEnd, SourceStart: Integer; tmp: PointerArray; i:Integer; begin SetLength(Result, 0);
SourceStart := Integer(Source); SourceEnd := SourceStart + SourceLen - (DataLen - 1);
while SourceStart < SourceEnd do begin if CompareMem(Pointer(SourceStart), Data, DataLen) then begin SetLength(tmp, Length(Result)); tmp := result;
SetLength(Result, Length(Result)+1); for i := 1 to Length(tmp) do Result[i] := tmp[i]; Result[Length(Result)] := Pointer(SourceStart); Inc(SourceStart, DataLen-1); end; inc(SourceStart); end; end; |
MfG