Księgarnia PWN: Mateusz Jurczyk, Gynvael Coldwind - Praktyczna inżynieria wsteczna
PW
N
SA
Spis treści
Wstęp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
ct
1.4.
w
o
1.3.
N
au
1.2.
Wywoływanie funkcji w językach (bardzo) niskiego poziomu . . . . . . . . . . . 21 1.1.1. CALL, RET i konwencje wywołań . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.1.2. Konwencje wywołań x86. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.1.3. Konwencje wywołań x86-64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Struktury.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.2.1. „Zgadywanie” wielkości i ułożenia elementów struktury w pamięci. . . . 30 1.2.2. Rozpoznawanie budowy struktur lokalnych i globalnych . . . . . . . . . 30 1.2.3. Rozpoznawanie budowy struktur dynamicznie alokowanych. . . . . . 32 Klasy, obiekty, dziedziczenie i tablice wirtualne.. . . . . . . . . . . . . . . . . . . . . . 34 1.3.1. Prosta klasa a struktura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 1.3.2. Obiekty = struktury + funkcje + thiscall. . . . . . . . . . . . . . . . . . . . . . 38 1.3.3. Wszystko zostaje w rodzinie, czyli dziedziczenie . . . . . . . . . . . . . . . . 38 Podsumowanie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
ko w
1.1.
e
1. Funkcje, struktury, klasy i obiekty na niskim poziomie. . . . . . . . . . . . . . . . . . . . . . . 19
2. Środowisko uruchomieniowe na systemach GNU/Linux. . . . . . . . . . . . . . . . . . . . . 43
Wstęp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Pliki wykonywalne ELF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.2.1. Identyfikacja systemu i architektury docelowej . . . . . . . . . . . . . . . . . 46 2.2.2. Segmenty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.2.3. Segment PT_LOAD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.2.4. Segment PT_DYNAMIC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.2.5. Sekcja .dynamic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.2.5.1. Deklaracja bibliotek zależnych. . . . . . . . . . . . . . . . . . . . . . . 57 2.2.5.2. Wczesna inicjalizacja programu. . . . . . . . . . . . . . . . . . . . . . 59 2.3. Środowisko uruchomieniowe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 2.3.1. Kod PIC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 2.3.2. Tablice GOT i PLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 2.3.3. Program ładujący ld.so . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
W
yd
aw ni
2.1. 2.2.
5
Inzynieria.indd 5
06.10.2016 12:25