Ich würd mal sagen irgendwie so:
Delphi-Quellcode:
function StartCode: PChar;
asm
MOV EAX,OFFSET StartMarker
RET
StartMarker:
DB '
CODESTART'#0
end;
procedure ProtectedCode;
begin
....
end;
procedure StopMarker;
asm
DB '
STOPCODE'#0
end;
function StopCode: PChar;
asm
MOV EAX,OFFSET StopMarker + 9
RET
end;
procedure Encode(P: Pointer; Len: Integer);
begin
//hier halt irgendwie enschlüsseln
end;
Delphi-Quellcode:
// speicher reservieren
P := GetMem(StopCode - StartCode);
// code von der Datei (diese wird ja in deinen RAM gemappt) kopieren
Move(StartCode, P, StopCode - StartCode);
// den code entschlüsseln
Encode(P, StopCode - StartCode);
// entschlüsselten code ausführen
P2 := P + (ProtectedCode - StartCode);
ASM
CALL &P2
End;
// Speicher wieder freigeben
FreeMem(P);
!!! keine Garantie, daß mein BeispielCode funktioniert, ist halt nur ein grobes Beispiel