Witam.
Próbuję zrobić hooka na funkcje w assemblerze. Robie to tak, że w funkcji, którą chcę przechwycić wycinam ze dwie instrukcje ( kilka bajtów ) i daje tam CALL adresMojejFunkcji. Moja funkcja jest wypełniona nopami, więc moge spokojnie tam skopiować kod, który wyciąłem. W ten sposób nie ma żadnych strat kodu i w mojej funkcji moge dać kod, który wykona sie po wywołaniu przechwyconej funkcji.
Wygląda to mniej więcej tak
// Początek funkcji, którą chce przechwycić
PUSH EBP
MOV EBP, ESP
// tutaj jakis przykładowe kod na początku funkcji
MOV test, 123
MOV zmienna, 123456
wycinam:
MOV test, 123
MOV zmienna, 123456
i zastepuje tam na call, wygląda to teraz mniej więcej tak:
PUSH EBP
MOV EBP, ESP
CALL adresMojejFunkcji
a tu zawartosc mojej funkcji po wklejeniu tam mojego kodu.
PUSH EBP
MOV EBP, ESP
MOV test, 123
MOV zmienna, 123456
nop
nop
nop
nop
nop
RETN
Teraz wystarczyło by jakoś powrócić do funkcji.
I mam pytanie:
Co oznacza PUSH EBP i MOV EBP, ESP na początku każdej funkcji (w OllyDbg) ?
Jest to wrzucenie na stos adresu powrotu?
Jeżeli tak, to jest problem.
Gdyby ten kod, który musze wkleić
MOV test, 123
MOV zmienna, 123456
byłby inny np.
PUSH test
PUSH 93
to moja funkcja wyglądała by tak:
PUSH EBP
MOV EBP, ESP
PUSH test
PUSH 93
nop
nop
nop
nop
nop
RETN
I jeżeli adres powrotu był na stosie, to 93 i zawartość test będzie wyżej na stosie, więc chyba nici z adresu powrotu?
Jak mogę zrobić poprawnie powrót do przechwytującej funkcji?
Z góry dziękuje za pomoc