ein call/jmp (e8, e9) ist relativ
d.h. du musst das vroher berechnen,
E8 = call, dann nen integer/cardinal für die distanz, wobei die berechnung zuadresse-vonadresse-5 ist
du musst auch noch die relocations alle fixen, bzw einfach keine benutzen
nen call bzw jump würdest könntest auch noch durch ne relocation fake jmp/call hinbekommen
Delphi-Quellcode:
mov eax, adresse
call eax
d.h. adresse würde dann bei deiner kompilierten exe in der relocation tabelle vorkommen, dann mussu net mehr nach den distance calls/jumps suchen
wenn du parameter über register übergibst kannste nen call/jmp auch so machen:
Delphi-Quellcode:
push adresse // unterfunktion oder jump
push @@ret1 // weglassen wenns nen jump sein soll, bei nem call brauchste das
ret
@@ret1:
du könntest aber auch alle funktionen die du benutzt in eine funktion auslagern dann brauchste dich eigentlich gar nicht mehr drum kümmern
Delphi-Quellcode:
procedure programstart; stdcall;
procedure unterfunktion1(a,b: integer); stdcall;
begin
end;
procedure unterfunktion2(a,b: integer); stdcall;
begin
end;
begin
unterfunktion1(1,2);
unterfunktion2(1,2);
end;
dann kopierste die ganze funktion in deine neue exe, aber auch hier musste noch die relcos zu den strings fixen