Oh je... Ich habe jetzt mal etliches ausprobiert und bin auf des Rätsels Lösung gestoßen. Ich habe ein
const bei dem Parameter für
MakeProcInstance eingeführt gehabt und genau hier liegt das Problem. Ich hab hier mal die auskommentierte Version:
Delphi-Quellcode:
class function TApGeneral.MakeProcInstance(
{const} 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;
Nur verstehe ich noch nicht so recht, warum das das Problem war, denn die Daten in
M sind doch die gleichen...
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)