Kod relokowalny

fl3a

Użytkownik
Dołączył
Marzec 12, 2005
Posty
538
Chcialbym poruszyc tu problem relokowalnego kodu. Zaluzmy ze korzystamy z MASMa i standardowo korzystamy z delty. Zaluzmy tez ze dane znajdowaly by sie w sekcji kodu. Jak teraz powinno wygladac wywolywanie funkcji, przekazywanie parametrow, etc. Zakladamy ze mamy juz kernel imagebase i pobralismy juz adresy funkcji. Czy moglby ktos przedstawic tu szkielet takiego kodu? Najlepiej fragment kodu by kazdy mogl zrozumiec o co chodzi.
 

Jonny

Użytkownik
Dołączył
Kwiecień 7, 2002
Posty
401
Originally posted by fl3a
Chcialbym poruszyc tu problem relokowalnego kodu. Zaluzmy ze korzystamy z MASMa i standardowo korzystamy z delty. Zaluzmy tez ze dane znajdowaly by sie w sekcji kodu. Jak teraz powinno wygladac wywolywanie funkcji, przekazywanie parametrow, etc. Zakladamy ze mamy juz kernel imagebase i pobralismy juz adresy funkcji. Czy moglby ktos przedstawic tu szkielet takiego kodu? Najlepiej fragment kodu by kazdy mogl zrozumiec o co chodzi.
Nie mozesz standardowo kozystac z wywolania postaci:
push offset lpbuf
push offset alfa
call GetSystemTime

bo wszystko zostanie skompilowane do adresow bezwzglednych - offsetow. Chcac wywolywac zwykle funkcje musisz wywolywac je posrednio - poprzez makra badz etykiety. Wowczas skok (no bo polecenie assemblera call to skok) bedzie kodowany nie jako offset tylko jako przesuniecie zakodowane w kodzie U2 (dodatnie lub ujemne, dlugie lub krotkie ale staraj sie aby bylo krotkie). Jesli chodzi o offsety zmiennych i stalych to tez mozesz kilka trickow uzyc. Includy ze stalymi w postaci etykiet (wywolanie poprzez call), makra (odkladanie na stosie), bezposrednie wmieszanie w kod (dodatkowy plus - kod jest strasznie zagmatwany po deassemblacji).
 
Do góry Bottom