Witam.
Chciałem zrobić hooka na funkcje używając assemblera i c++.
Nie chcę używac biblioteki detours, <ort>poza tym </ort>detours chyba tylko zakłada hooki na funkcje API ?
przykładowo tu jest funkcja z OllyDbg:
// naglowek funkcji (?)
push EBP
mov EBP, ESP
// przypisanie zmiennej
mov zmienna, 1
// wrzucenie parametru na stos
PUSH zmienna
// wywołanie jakiejs tam funkcji
CALL 0x12345
retn
i mysle, zeby dac <ort>po prostu </ort>pod nagłowkiem funkcji CALL do mojej funkcji i pobranie zwróconej wartosci i zwrocenie jej i przerwanie jezeli wartosc jest true, a kontynuowanie jezeli wartosc zwrocona przez moją funkcje przechwytującą jest false.
Tylko, że nie ma miejsca na CALL i sprawdzenie czy wartosc zwrocona przez moją funkcje przechwytującą jest true/false. I czy przesunięcie całej pamięci o kilka bajtow zeby zrobic miejsce byloby dobrym pomyslem ?
Czy może zadeklarować ileśtam bajtów funkcją VirtualAllocEx, i tam skopiować funkcje, którą chce przechwycić.
I w starym miejscu funkcji którą chce <ort>po prostu </ort>nadpisac kilka bajtów i dać CALL mojaFunkcja
czyli jezeli ktos wywola tą funkcje:
funkcjaKtórąChcęPrzechwycic();
to wywoła się wtedy moja funkcja:
int mojaFunkcja()
{
}
i wtedy moge np w niej dac wywołanie oryginału
int mojaFunkcja()
{
// sprawdzenie czegos tam
// wywolanie i zwrocenie wartosci zwroconej przez funkcje oryginalną
return funkcjaKtórąChcęPrzechwycic();
}
Co o tym myslicie?
Pozdrawiam</asm>