Das ist schon eine nahezu perfekte Optimierung. Die umrahmten Bytes sind einfach da, das ist Absicht. Die nächste Anweisung ist so an einer DWORD-Adresse, was Sprünge oder Calls einen Speedvorteil bringen kann. Mach mal einen Test: Nimm dir die Funktion
Delphi-Quellcode:
procedure Test;
asm
nop
inc eax
ret
end;
Und teste sie durch, indem du einmal CALL Test aufrufst und im anderen Fall eben so:
Delphi-Quellcode:
asm
lea edx, Test
inc edx
end;
// Weiterer Testcode
asm
call edx
end;
Beides führt den selben Code aus, aber nur CALL Test wird direkt eine DWORD-Adresse aufrufen. Dürfte also schneller sein
PS: Ich hab's nicht getestet. Noch nicht
@retnyg: Wenn es Variablen wären (die drei umrahmten Bytes), müsste das Programm schreibrechte auf die Daten um EIP haben. Ist aber nicht der Fall, also können es keine Variablen sein.