Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Překladače 9. Generování cílového kódu

Podobné prezentace


Prezentace na téma: "Překladače 9. Generování cílového kódu"— Transkript prezentace:

1 Překladače 9. Generování cílového kódu
Obsah: object kód, linker, relokace dynamické knihovny, loader PIC, PIE, spustitelný soubor formáty souborů ELF, EXE, COM, DLL ladění, core-dump logování, trasování, profilování systémy na sledování chyb © Milan Keršláger

2 Generování cílového kódu
poslední fáze překladu vstup: mezikód výstup: object kód dále zpracovává linker vstup: object kód výstup: knihovna, spustitelný soubor soubory obsahují metadata, strojové instrukce, data lze využít atributovou gramatiku

3 Object kód typicky uložen v souboru unixové systémy: *.o, *.so
obsahuje strojový kód (někdy přímo spustitelný) často obsahuje doplňující metadata relokační tabulka interní a externí identifikátory funkcí a proměnných přesněji: definované, nedefinované a interní ladící informace různé formáty unixové systémy: a.out, ELF Windows: COM, EXE

4 Linker typicky není součástí překladače
vstupem je object kód (typicky více, knihovny) výstupem je hotový spustitelný soubor (knihovna) řeší odkazy na symboly pomocí sloučení více modulů, knihoven někdy ne úplně: výjimkou jsou dynamické knihovny rozhoduje o umístění v paměti relokace na výsledné místo relokatibilita může být zachována (PIC)

5 Relokace přizpůsobení kódu konkrétnímu umístění
strojový kód používá absolutní adresy při nahrání kódu na jinou adresu by nefungovalo modifikace absolutních adres podle relokační tabulky nebo vyřešení symbolů relokační tabulka je součástí spustitelného souboru probíhá typicky dvakrát linker – při sestavování výstupního kódu loader – při startu programu (dynamické knihovny)

6 Dynamické knihovny možnost relokace
neví se, kde v adresním prostoru bude místo problém zejména IA-32 (jen 4, resp. 2 GiB) zavaděč rozhodne při startu programu snaha o maximalizaci sdílení knihoven nemusí být možné – kolize s knihovnou, kódem nejvýhodnější rozložení lze vypočítat Linux: prelink, Windows: Microsoft při kompilaci DLL oboje relokace na vhodnou adresy předem zrychlení startu (některých) programů

7 Loader zavaděč programu do paměti poměrně komplikovaná úloha
zejména ve spojitosti s dynamickými knihovnami velký měnící se počet, netriviální optimalizace výsledku typicky samostatný (speciální) program kontrola oprávnění a nároků programu vyřešení nedefinovaných symbolů (+ preload) nakopírování programu a knihoven do paměti nastavení sdílené paměti pro knihovny (cizí, vlastní) předání argumentů z příkazového řádku inicializace registrů a skok na začátek (_start)

8 PIC a PIE Position Independent Code funguje na jakékoliv adrese
nepotřebuje tedy relokaci (resp. modifikaci) vyžadována podpora instrukcí s relativní adresou v CPU využíváno u knihoven Position Independent Executable v Linuxu bezpečnostní opatření kód je nahrán na „náhodnou“ adresu na IA-32 silně omezené množství cílových adres ztěžuje některé útoky (přepsání zásobníku)

9 Spustitelný soubor program ve vykonatelné podobě
typicky soubor se strojovým kódem různé formáty (ELF, EXE, COM, ...) též bytecode (Java) nebo skript (interpretace) specifické odlišení od ostatních souborů unixové systémy: nastaveno oprávnění „spustitelný“ Windows: přípona .EXE, .COM, ale též .DLL a další specifický obsah pro danou platformu, architekturu systémová volání, instrukční sada, metadata → ABI (binární rozhraní) → též Wine na Linuxu

10 ELF Executable and Linkable Format
původně pro Unix System V jako definované ABI 1999 – zvoleno pro unixové systémy spustitelné soubory, sdílené knihovny, object kód, core flexibilní a rozšiřitelný formát hlavička, segmenty, sekce, data není vztažen k jedné architektuře Linux, PlayStation, Nintendo, OpenVMS, ... nástroje: readelf, objdump, file

11 EXE Executable (formát a přípona souboru) několik variant
DOS (MZ, NE), Windows (NE, LX, PE), OS/2 (LE, LX) mnoho dalších interních variant, ale i komprimované atd. Windows EXE má na začátku MZ, který vypíše zhruba: „Tento program nelze spustit v prostředí DOSu“ kromě metadat a kódu i další data („resources“) ikony, bitmapy, fonty, HTML dokument, ... sekce pro různé platformy (viz výše) PE – Portable Executable modifikovaný unixový COFF formát

12 COM Command file (formát a přípona souboru)
dědictví z CP/M (v DOS, Windows) tj. též formát spustitelného souboru (16bitový kód) neplést s doménou .com (např. závislý na NTVDM (není na 64bitových systémech) bez hlavičky, jen strojový kód a data velikost omezena na 0xFF00 (65280 bajtů) nahrán od adresy 0x0100 COMMAND.COM shell (interpret příkazového řádku) pro DOS

13 DLL implementace sdílených knihoven
též přípony .OCX (ActiveX control), .DRV (ovladač) stejný formát, jako EXE → PE verze není součástí názvu problémy koexistence různých verzí → DLL hell Microsoft neposkytuje správu, aktualizace atd. snadno sdílitelné mezi stejnými aplikacemi nesnadno sdílitelné mezi různými aplikacemi COM model rozšiřuje koncept DLL knihoven volání funkce v DLL knihovně (jako dlopen v POSIXu) rozšířeno na volání mezi procesy nebo i mezi počítači

14 Ladění hledání chyb v programech (bug → debugging)
testování programu (tzv. QA) ladící výpisy (doplňující hlášení programu) ladící nástroje (debugger, speciální knihovny, ...) atd. v nižších jazycích → skryté potíže přepsání části paměti → obtížná reprodukovatelnost breakpoint bod přerušení běhu programu traceback ladící výpis, vyšší jazyky odchytávání výjimek vzdálené ladění, post-mortem (core), anti- debugging

15 Výpis obrazu paměti tzv. core dump
zachycení stavu programu v určitém okamžiku typicky při havárii včetně souvisejících údajů registry CPU, prostředí programu, stav zásobníku, ... lze však prakticky v jakémkoliv okamžiku dříve používáno pro CPU bez podpory ladění analýza speciálním nástrojem (debugger) původně jen lineární obsah paměti dnes např. formát ELF z bezpečnostních důvodů typicky vypnuto výpis paměti jádra při pádu OS – po síti

16 Systém pro sledování chyb
typicky databáze uživatel hlásí potíže přidělení technikovi komunikace technik – uživatel forma vyřešení problému „not a bug“, „deffer“, „fixed“, „on QA“, atd. umožňuje statistické zpracování v které části programu jsou kritické chyby které chyby se změní na „vlastnosti“ někdy je odstranění chyby bolestivější, než ignorování

17 Logování a trasování logování záznam činnosti (pro správce systému)
tedy „co program udělal“ srozumitelné bez pochopení fungování programu využívá specifický subsystém Unix: syslog, Windows: Event Logger trasování slouží k ladění a diagnostice využíváno při vývoji software (i modif. zdroj. kódu) záznam (mezi) akcí nebo okolností předpokládá přítomnost vývojáře

18 Profilování slouží pro optimalizaci programu
využívá speciální nástroje za běhu programu analýza využití kódu nebo paměti měření doby vykonávání úseků kódu (funkcí) záznam volání knihovních funkcí (prof) vytváření grafického záznamu (grafy) instrumentace modifikování zdrojového kódu modifikace binárního tvaru

19 Běhové prostředí zajišťuje běh (přeloženého) programu
součást spustitelného souboru např. pro Borland Pascal (pro DOS) samostatná komponenta pro komplikovanější prostředí a jazyky JRE (Java Runtime Environment) .NET, Visual Basic, … zajišťuje přetypování proměnných, ošetření výjimek (např. dělení nulou), plánování procesoru (Win16), (základní) knihovní funkce, interpretaci kódu a podobně


Stáhnout ppt "Překladače 9. Generování cílového kódu"

Podobné prezentace


Reklamy Google