Thema: Delphi Prozess Dumpen

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Prozess Dumpen

  Alt 2. Jun 2006, 18:45
Aber an Grundlagen fehlt es dennoch etwas

setlength(aob, high(aob) + 2); entspricht
setlength(aob, (length(aob) - 1) + 2);

HIGH ruft LENGTH auf und zieht (bei len>0 ?? oder prüft es garnicht ... bin mir gerade nicht ganz sicher) eins ab.


setlength(aob, length(aob) + 1); ich hoffe es geht jetzt nicht zu schnell:
Delphi-Quellcode:
while FromAddress < ToAddress do
  begin
    setlength(aob, length(aob) + 1);
    aob[high(aob)] := pByte(FromAddress)^;
    inc(FromAddress, 1);
  end;
Delphi-Quellcode:
while FromAddress < ToAddress do
  begin
    i := length(aob)
    setlength(aob, i + 1);
    aob[i] := pByte(FromAddress)^;
    inc(FromAddress, 1);
  end;
Delphi-Quellcode:
for i2 := FromAddress to ToAddress - 1 do
  begin
    i := length(aob)
    setlength(aob, i + 1);
    aob[i] := pByte(i2)^;
  end;
Delphi-Quellcode:
setlength(aob, ToAddress - FromAddress - 1);
for i := 0 to high(aob) do
  aob[i] := pByte(i + FromAddress)^;
Delphi-Quellcode:
setlength(aob, ToAddress - FromAddress - 1);
CopyMem(FromAddress^, aob[0], length(aob);
1. weißt du, wie oft SETLENGTH aufgerufen wird? (für jedes Byte der Datei einmal ... nicht gerade effizient.

2. und warum jedes byte einzeln auslesen?
(Integer, statt byte järe ja schon effizienter gewesen, vorallem weil es den bus/die register besser ausnutzt ... oder halt gleich alles auf einmal)

selbst wenn du jedes Byte einzeln auslesen willst ... SETLENGTH hättest du dennoch vorher setzten können.
Du weißt doch schließlich schon vorher wie groß es werden wird. (ToAddress - FromAddress - 1);

3. aber warum willst du deine eigene EXE kopieren (notfalls ließ es doch direkt aus der Datei, da fängt der Inhalt immer bei null an und der Anfang muß nicht erst gesucht werden)

4. laß ich jetzt lieber

5. außerdem klingt ToAddress irgendwie falsch, denn nach deinem AusgangsCode ist es nicht das letzte Byte, welches gelesen wird, sondern das Byte danach.
$2B or not $2B
  Mit Zitat antworten Zitat