Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

...Methodenzeiger in Funktionszeiger konvertieren?

  Alt 3. Aug 2007, 09:59
Bei den Schweizern gibt es folgenden Code, um einen Methodenzeiger in einen Funktionszeiger zu konvertieren:
Delphi-Quellcode:
function MakeProcInstance(M: TMethod): Pointer;
begin
  // allocate memory
  GetMem(Result, 15);
  asm
    // MOV ECX,
    MOV BYTE PTR [EAX], $B9
    MOV ECX, M.Data
    MOV DWORD PTR [EAX+$1], ECX
    // POP EDX
    MOV BYTE PTR [EAX+$5], $5A
    // PUSH ECX
    MOV BYTE PTR [EAX+$6], $51
    // PUSH EDX
    MOV BYTE PTR [EAX+$7], $52
    // MOV ECX,
    MOV BYTE PTR [EAX+$8], $B9
    MOV ECX, M.Code
    MOV DWORD PTR [EAX+$9], ECX
    // JMP ECX
    MOV BYTE PTR [EAX+$D], $FF
    MOV BYTE PTR [EAX+$E], $E1
  end;
end;
Dazu hätte ich noch Verständnisfragen:

1: Warum ist der Speicherbereich, der mit GetMem alloziiert wird ausführbar?
2: Warum werden 15 Bytes alloziiert? 4 Byte Code-Zeiger + 4 Byte Daten-Zeiger + 4 Byte Aufruf der Methode + 4 Byte Rückgabewert = 16
3: Warum wird in dem Code alles mit MOV gemacht?
4: Könnte mal bitte jemand entsprechend Kommentare einfügen im Code an den Stellen an dem der Code-Zeiger, Daten-Zeiger, der Aufruf und der Rückgabewert in den Speicherbereich kopiert werden? Ich kann leider kein ASM.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat