PB173 - Binární programování Linux I. GIT a binární programování Jiri Slabý Fakulta informatiky Masarykova univerzita 16. 9. 2014 Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 1/19 Obsah cvičení Q Úvodní informace O GIT Q Binární programování Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 2/ 19 Sekce 1 Úvodní informace Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 3/ 19 Úvodní informace • Semestr = 13 týdnů (14. 10. konference) • Cvičící • Vývoj jádra od r. 2005 (NetBSD, Linux) • Absolvent Fl • Cíle cvičení • Nastínit trochu jiný model programování • Prohloubit znalosti vnitřností OS a vrstvy pod jazykem • Ukončení: k • Splnění všech domácích úkolů 9 10 bodů na úkol, alespoň | z celkového počtu • Vše potřebné ve studijních materiálech v isu Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 4/ 19 Bodování úkolů Na začátku: 10 bodů za každý příklad • -3 body za každý týden prodlení (termín je vždy do dalšího cvičení) • -2 body za každé vrácení v případě nějaké nefunkčnosti • -2 body za závažný problém (ve slidech značené POZOR) • -1 bod za kód neodpovídající stylu • -1 bod za ostatní drobnosti Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 5/ 19 S čím budeme pracovat? HW * Stroje satyr01-10 • CentOS 6.x • Login/heslo: vyvoj/vyvoj • Nemají viditelnou IP Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 6/ 19 S čím budeme pracovat? • GIT s Úvod do GITu dnes 9 Podrobněji: http://book.git-scm.com/ • Zdroje jádra • GIT: http://git.kernel.org • LXR: http://lxr.free-electrons.com/ident a Zdroje glibc a GIT:http://repo.or.cz/w/glibc. git a LXR: http://koala.cs.pub.ro/lxr/glibc/ a AntLR, Binutils, Coreutils, Elfutils, libDwarf, ... Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 7/ 19 Sekce 2 GIT Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 8/ 19 Úkol GIT a repozitář PB173 O Stáhněte si repozitář na aisu (doporučeno, můžete vynechat) • git cloně git://github. com/j irislaby/pbl73-bin O Vytvořte si lokální klon • git cloně aisa:pbl73 Q Prozkoumejte strukturu • Příklady ze cvičení • Adresář pro domácí úkoly Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 9/ 19 Úkol GIT a úpravy souborů O Změňte cokoliv v souboru sandbox/heiio O Zkontrolujte změny (git dif f --color) O Uložte do lokálního repozitáře (git commit -a) » Git může chtít nastavit jméno a e-mail (instrukce jsou na stdout) • Formát logu (vzor:git.kernel. org) Shrnutí na řádek Odůvodnění (delší popis) Podpisy a CC O Smažte sandbox/hello (git rm) 0 git commit -a Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 10/19 GIT a commity • Každý commit je pojmenován SHA hashem • Např. d3323cl503d54d83b0eae6c7927dede2d2973059, lze i zkráceně d3323cl503 • head je alias pro poslední • Lze odkazovat předchůdce pomocí ~ 9 Např. HEAD~1, d3323cl503~5 • Lze vytvořit jmenný alias, tzv. tag Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 11/19 Úkol GIT a commity O Zkontrolujte log, zda obsahuje 2 změny (git log --color) O Podívejte se na poslední 2 změny (git show --color head, resp. head~1) Q Vygenerujte záplaty 2 posledních commitů (git format-patch -2) O Proveďte push (git push, pokud máte klon na aise) Odevzdávání domácích úkolů odesláním záplaty na e-mail. Posílejte jen plain-text přílohy! Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 12/19 Sekce 3 Binární programování Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 13/19 Jen jádro a my • V některých cvičeních bez libc (printf, strien, mailoc, ...), ani ostatní (pthread) a Jen rozhraní jádra a překladač • Naučíme se rozhraní používat • Nastíníme tvorbu překladače • Uvedeme si souborové formáty a budeme s nimi pracovat • Probereme si malé základy assembleru • ... Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 14/19 GCC • Pro preklad C i assembleru a C budeme psát ve stylu jádra (CodingStyle) • Kontrola: v jádře scripts/checkpatch.pl (není 100%) a Důležité volby o -E-jen preprocesor • -S - generování assembleru • -c - generování objektových souborů • -x - definuje jazyk SOUboru (-x c souborl -x assembler soubor2) • -Q - optimalizace (-00, -02, ...) a Dokumentace • Offline: info/pinfo • Na webu: Using the GNU Compiler Collection Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 15/19 Úkol Volání gcc O Pomocí roury přeložte main, který něco vypíše, do objektu • echo -e '#include \n int main(){ putsC'Hello"); return 0; }' I ... Q Spusttě všechny tři fáze (-e, -S a -c) jako samostatné příkazy propojené rourami • echo ... I gcc -E ... I gcc -S ... I gcc -c ... O Pozorujte -Ea-S výstupy O Zapněte optimalizace -02 a pozorujte oba výstupy znovu Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 16/19 OBJDUMP/OBJCOPY • Slouží k práci s objekty • objdump vypisuje informace • -D disassembler vstupu • -h výpis sekcí vstupu • -b formát vstupu • -m stroj vstupu • objcopy transformuje • -i formát vstupu • -Q formát výstupu • Společný důležitý argument • - j specifikace sekce Jiri Slabý (Fakulta informatiky, MU) Úkol Práce s objekty O Vypište si informace o svém objektu z předchozího příkladu pomocí objdump • Porovnejte výstupy objdump -D a gcc -S -fverbose-asm • Použijte -h O Extrahujte .text sekci pomocí objcopy • Vložte ji do nového souboru v binární podobě • Tj. použijete -j .sekce a -Q binary Q Disassemblujte tento binární výstup pomocí objdump • Musíte specifikovat formát (-b binary) a Stroj (-m i386:x86-64) Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 18/19 Úkol Práce s objekty II. O Prozkoumejte adresář 01 z pb173 git repozitáře Q Je tam soubor x.bin podobně vytvořený jako váš » Formátbinary, pro i386:x86-64 © Je v něm funkce, nápověda: • Akceptuje dva int parametry a vrací int • Je „const" - tj. kromě parametrů nebere v úvahu nic O Zavolejte ji O Zjistěte, co dělá Jiri Slabý (Fakulta informatiky, MU) PB173/03 16.9.2014 19/19