Da, na kraju sam izabrao ovo drugo (push addr/retn). Zaboravio sam da spomenem
da mi takodje treba i call, mada moze da prodje
mov eax, addr
call eax
iako mi se ne svidja sto unistava eax. Jel ima mozda nesto bolje?
A sve ovo mi treba jer sam napisao primitivan (ali vrlo efikasan) relocatable
loader i patcher za jednu igru. Reference ka podacima rade odlicno, jer je to
sve apsolutno, ali skokovi i pozivi su bili problem jer su relativni.
Klasican primer je:
- patchovati neku adresu u igri, zameniti sa jmp my_code
- my_code se nalazi u mom kodu, koga ucitava loader i tu vec nastaje problem
kako izracunati relativni offset (a win32 asembleri i kompajleri ne izdaju
fixup record za skokove)
- u my_code se takodje nalaze pozivi raznim funkcijama unutar igre, i na kraju
jmp sledeca_instrukcija_u_igri; to takodje treba povezati
Ali ako koristim ove stosove, onda je sve u redu, jer su reference ka podacima
sredjene pre izvrsenja. Mislio sam da ima neki "legitiman" nacin, neka
instrukcija jmp/call <absulte address>, da ustedim koji bajt i da ne
prepisujem previse koda.