PB173 - Binární programování Linux I. GIT a binární programování Jiri Slabý ITI, Fakulta informatiky 17. 9. 2013 J. Slabý (ITI, Fl) PB173/07 17.9.2013 1/17 Část I Úvodní informace J. Slabý (ITI, Fl) PB173/07 17.9.2013 2/ 17 Úvodní informace • Semestr = 13 týdnů (22. 10. konference) • Cvičící o Vývoj jádra od r. 2005 (NetBSD, Linux) o Student Fl o 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ů • 10 bodů na úkol, alespoň | z celkového počtu • Vše potřebné ve studijních materiálech v ISu J. Slabý (ITI, Fl) PB173/07 17.9.2013 3/ 17 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) a -1 bod za kód neodpovídající stylu • -1 bod za ostatní drobnosti J. Slabý (ITI, Fl) PB173/07 17.9.2013 4/ 17 S čím budeme pracovat? HW a Stroje satyr01-10 • CentOS 6.x • Login/heslo: vyvoj/vyvoj • Nemají viditelnou IP J. Slabý (ITI, Fl) S čím budeme pracovat? sw a GIT • Úvod do GITu dnes • Podrobněji: http://book.git-scm.com/ a Zdroje jádra • GIT: http://git.kernel.org • LXR:http://lxr.linux.no/ a Zdroje glibc • GIT http://repo.or.cz/w/glibc.git • LXR: http://koala.cs.pub.ro/lxr/glibc/ a AntLR, Binutils, Coreutils, Elfutils, ... J. Slabý (ITI, Fl) PB173/07 17.9.2013 6/ 17 Část II GIT J. Slabý (ITI, Fl) PB173/07 17.9.2013 7/ 17 Úkol Práce s GITem I. O Vytvořte si účet (pokud nemáte) na github.com O Proveďte fork • https://github.com/j irislaby/pbl73-bin 0 Stáhněte si fork • git cloně git://github.com//pbl73-bin.git O Prozkoumejte strukturu • Příklady ze cvičení • Adresář pro domácí úkoly J. Slabý (ITI, Fl) PB173/07 17.9.2013 8/ 17 Záplatování Výstup GITu = patch (záplata) Záplaty v linuxovém jádře O Poslat patch O Poslat „pull request" a vystavit celý GIT strom Stejným způsobem odevzdávání domácích úkolů Ale ne přes github! J. Slabý (ITI, Fl) PB173/07 17.9.2013 9/ 17 Úkol Práce s GITem II. O Změňte cokoliv v souboru sandbox/hello O Zkontrolujte změny (git dif f —color) O git commit -a (správný log: shrnutí na řádek, volný řádek, zdůvodnění; vzor na git.kernel. org) • Git může chtít nastavit jméno a e-mail (instrukce jsou na stdout) O Smažte sandbox/hello (git rm) O git commit -a 0 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~i) 0 Vyzkoušejte git format-patch -2 O Proveďte push (git push) © Vygenerujte pull request (git request-pull) J. Slabý (ITI, Fl) PB173/07 17.9.2013 10/17 Část III Binární programování J. Slabý (ITI, Fl) PB173/07 17.9.2013 11/17 Jen jádro a my • Žádné libc (printf, strien, mailoc,...), ani ostatní (pthread) * 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 • ... J. Slabý (ITI, Fl) PB173/07 17.9.2013 12/ 17 GCC • Pro preklad C i assembleru a C budeme psát ve stylu jádra (CodingStyle) • Kontrola: scripts/checkpatch.pl (není 100%) • Důležité volby • -E-jen preprocesor • -s - generování assembleru » -c - generování objektových souborů • -x - definuje jazyk SOUboru (-x c souborl -x assembler soubor2) • -o - optimalizace (-00, -02, ...) • info/pinfo • Dokumentace: Using the GNU Compiler Collection J. Slaby (ITI, Fl) PB173/07 17.9.2013 13/17 Úkol Volání gcc O Pomocí roury přeložte main, který něco vypíše, do objektu O echo -e 5#include \n int main(){ puts("Hello"); return 0; }' | ... O Spusttě všechny tři fáze (-e, -s a -c) jako samostatné příkazy propojené rourami O Pozorujte -e a -s výstupy O Zapněte optimalizace -02 a pozorujte znovu J. Slabý (ITI, Fl) PB173/07 17.9.2013 14/17 OBJDUMP/OBJCOPY • Slouží k práci s objekty • objdump vypisuje informace • -D disassembler • -h výpis sekcí souboru • -b formát vstupu • -m stroj vstupu • objcopy transformuje • -i formát vstupu • -0 formát výstupu • Společný důležitý argument • -j specifikace sekce J. Slabý (ITI, Fl) Úkol Práce s objekty O Vypište si informace o vašem objektu z předchozího příkladu pomocí objdump • Za použití -h O Extrahujte .text sekci pomocí ob j copy • Z předchozího výpisu zjistěte, která má nenulovou velikost • Vložte ji do souboru v binární podobě • Tj. použijete -j .sekce a -0 binary Q Disassemblujte tento binární výstup pomocí objdump • Musíte specifikovat formát (-b binary) a Stroj (-m i386:x86-64) J. Slabý (ITI, Fl) PB173/07 17.9.2013 16/17 Ú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áš (ve formátu i386:x86-64) O Je v něm funkce • Akceptuje dva int parametry a vrací int • Je „const" - tj. kromě parametrů nebere v úvahu nic O Zavolejte ji 0 Zjistěte, co dělá J. Slabý (ITI, Fl) PB173/07 17.9.2013 17/17