REV úloha 2: Importní tabulka
Čtvrtek 26. 11. 2026: paralelka 101 v 16:00, 102 v 17:45, 103 v 19:30. Po termínu je to 0 bodů. Úloha je za 10 bodů a odevzdat ji můžeš víckrát.
Co máš odevzdat
Program s funkcemi MallocDebug_Init, MallocDebug_Done a substitucemi pro malloc, calloc, realloc a free. Init přepíše IAT, substituce si vedou záznamy a Done vrátí IAT a vypíše úniky.
Co musíš pochopit
- Cestu k IAT: DOS hlavička, NT hlavičky,
DataDirectory, importní adresář. - RVA: všechny adresy jsou offsety od báze modulu.
- Rozdíl
OriginalFirstThunkaFirstThunk: jména hledáš v prvním, adresy přepisuješ ve druhém. VirtualProtect: před zápisem odemkni a pak vrať původní ochranu.- Specifikaci
realloc: tady selhává nejvíc jinak dobrých řešení.
Co si zopakovat
| Co | Kde |
|---|---|
| Procházení importního adresáře | cvičení 4 |
| Kapitola o importech | Tok kódu, start programu a importy |
Překlad s /MD |
zadání, sekce Řešení běžných problémů |
Doporučené pořadí
- Přelož testovací program s
/MDa v CFF Exploreru ověř, že importuje paměťové funkce. - Vypiš všechny importy programu, ještě bez zápisu.
- Najdi a přepiš jednu funkci.
- Doplň zbylé tři a uložení původních ukazatelů.
- Napiš tabulku záznamů a výpis úniků.
- Ošetři okrajové případy.
- Otestuj opakované Init a Done v libovolném pořadí.
Na co si dát pozor
- Importní adresář může být poškozený. Program ho musí zpracovat podle specifikace a bez pádu.
- Stejná knihovna i funkce může být importovaná víckrát.
- Stačí ti
IMAGE_IMPORT_BY_NAME, jiné thunky řešit nemusíš. - Substituce musí volat uložený ukazatel, ne
malloc, jinak zacyklíš. - Nepiš vlastní správce paměti, jen pozoruj a předej dál.
- Výstup nejsou jednotlivé operace, ale špatné použití: neuvolněný blok a uvolnění neznámého nebo už uvolněného bloku.
- Kód z internetu musíš citovat a často obsahuje chyby. Zadání výslovně varuje před ired.team.
Okrajové případy realloc
Nastuduj si dokumentaci a otestuj aspoň: nulový ukazatel, nulovou velikost, zvětšení s přesunem bloku a selhání.
Pravidla pro AI
Musíš vyznačit části řešené s AI a vždy přiložit celý záznam konverzace, jinak je řešení za 0 bodů. Pokud z tohoto soupisu vycházíš, přilož konverzaci, ve které vznikl, a každou další konverzaci s AI k této úloze. Soupis obsahuje jen obecné postupy a neanalyzuje zadané programy.
Kontrola před odesláním
- Program importuje funkce dynamicky (
/MD). - Vytvořil jsem úmyslný únik a program ho nahlásil.
- Dvojité
freese nahlásí. -
reallocfunguje ve všech případech. - Opakované Init a Done nerozbijí IAT.
- Vadný importní adresář nezpůsobí pád.
- Přikládám celý záznam konverzace s AI a části s AI jsou vyznačené.