PB173 - Binární programování Linux I. GIT a binární programování Jiri Slabý Fakulta informatiky Masarykova univerzita 24. 9. 2015 Jiri Slabý (Fakulta informatiky, MU) PB173/05 24.9.2015 1 / 19 Obsah cvičení Q Úvodní informace O GIT Q Binární programování Jiri Slabý (Fakulta informatiky, MU) PB173/05 24.9.2015 2/ 19 Sekce 1 Úvodní informace Jiri Slabý (Fakulta informatiky, MU) PB173/05 24.9.2015 3/ 19 Úvodní informace • Semestr = 13 týdnů • 15. 10. pravděpodobně 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ů • 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/05 24.9.2015 4/ 19 Bodování úkolů 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í) • -3 body za bezpečnostní díru (ve slidech značené POZOR) • -2 body za každé vrácení v případě nějaké nefunkčnosti • -1 bod za kód neodpovídající stylu • -1 bod za ostatní drobnosti Jiri Slabý (Fakulta informatiky, MU) PB173/05 24.9.2015 5/ 19 S čím budeme pracovat? Hardware • Stroje satyr01-10 o CentOS6.x • Login/heslo: vyvoj/vyvoj Nemají viditelnou IP Jiri Slabý (Fakulta informatiky, MU) PB173/05 24.9.2015 6/ 19 S čím budeme pracovat? Software • GIT • Úvod do GITu dnes • Podrobněji: http://book.git-scm.com/ • Zdroje jádra • GIT: http://git.kernel.org • LXR: http://lxr.free-electrons.com/ident • Zdroje glibc • GIT:http://repo.or.cz/w/glibc.git • AntLR, Binutils, Coreutils, Elfutils, Gdb, IPC, libDwarf, libPciAccess, RPC,... Jiri Slabý (Fakulta informatiky, MU) PB173/05 24.9.2015 7/ 19 Sekce 2 GIT Jiri Slabý (Fakulta informatiky, MU) PB173/05 24.9.2015 8/ 19 Úkol GIT a repozitář PB173 O Stáhněte si repozitář na aisu (doporučeno, můžete vynechat) • git cloně --bare git: //github. com/jirislaby/pbl73-bin pbl73-bin O Vytvořte si lokální klon • git cloně xlogin@aisa:pbl73-bin O Prozkoumejte strukturu • Příklady ze cvičení • Adresář pro domácí úkoly Jiri Slabý (Fakulta informatiky, MU) PB173/05 24.9.2015 9/ 19 Úkol GIT a úpravy souborů O Změňte COkoliv V SOUboru sandbox/hello 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) O git commit -a Jiri Slabý (Fakulta informatiky, MU) PB173/05 24.9.2015 10/ 19 GIT a commity • Každý commit je pojmenován SHA hashem • Např. d3323cl503d54d83b0eae6c7927dede2d2973059, lze i zkráceně d3323ci503 • head je alias pro horní/poslední commit • Lze odkazovat předchůdce pomocí ~ nebo A • Např. HEADAAA, HEAD~1, d3323cl503~5 • Lze vytvořit jmenný alias, tzv. tag • Více: man gitrevisions Jiri Slabý (Fakulta informatiky, MU) PB173/05 24.9.2015 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 ze 2 posledních commitů (git format-patch -2) O Proveďte push (git push, jen 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/05 24. 9. 2015 12/19 Sekce 3 Binární programování Jiri Slabý (Fakulta informatiky, MU) PB173/05 24.9.2015 13/ 19 Binární programování • Popíšeme si fáze překladače • Nastíníme tvorbu překladače • Uvedeme si souborové formáty a budeme s nimi pracovat • C bez HbC (printf, strlen, malloc, ...) a ostatních • Probereme si malé základy assembleru • Ladění z jiného úhlu pohledu • Komunikace s HW a mezi procesy C budeme psát ve stylu jádra (CoďmgStyle) • Kontrola: v jádře scripts/checkpatch.pi (není 100%) Jiri Slabý (Fakulta informatiky, MU) PB173/05 24. 9. 2015 14/19 GCC • Pro překlad C5 assembleru a hlavičkových souborů • Důležité volby • -E - spusť jen preprocesor a skonči • -S - generuj assembleru • -c - generuj objektový soubor • -x - definujeme jazyk souboru, když nelze určit dle přípony (-x c soubor_v_C -x assembler soubor_v_asm) • -0 - optimalizace (-00, -02, ...) • -w - varování (-Wall, ...) • Dokumentace • Offline: info/pinfo • Na webu: Using the GNU Compiler Collection Jiri Slabý (Fakulta informatiky, MU) PB173/05 24. 9. 2015 15/19 Úkol Volání gcc O Pomocí roury přeložte main, který něco vypíše, do objektu • echo -e 5#include \n int main(){ puts("Hello"); return 0; }' I ... Q Spusťte všechny tři fáze (-e, -S a -c) postupně jako samostatné příkazy propojené rourami • echo ... | gcc -E ... • echo ... | gcc -E ... | gcc -S ... • echo ... | gcc -E ... | gcc -S ... I gcc -c ... Q Pozorujte -e a -S výstupy O Zapněte optimalizace -02 a pozorujte oba výstupy znovu • Mění optimalizace oba výstupy? Jiri Slabý (Fakulta informatiky, MU) PB173/05 24. 9. 2015 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 • -0 formát výstupu Společný důležitý argument • - j specifikace sekce Jiri Slabý (Fakulta informatiky, MU) PB173/05 24.9.2015 17/ 19 Úkol Práce s objekty O Vypište si informace o svém objektu z předchozího příkladu pomocí ob j dump • Porovnejte výstupy ob j dump -D a gcc -S -fverbose-asm • Použijte -h Q Extrahujte .text sekci pomocí objcopy • Vložte ji do nového souboru v binární podobě • Tj. použijete -j .sekce a -0 binary Q Disassemblujte tento binární výstup pomocí ob j dump • Musíte specifikovat formát (-b binary) a Stroj (-m i386:x86-64) Jiri Slabý (Fakulta informatiky, MU) PB173/05 24. 9. 2015 18/19 Úkol Práce s objekty II. O Prozkoumejte adresář 01 z pb173 git repozitáře O Je tam soubor x.bin podobně vytvořený jako váš • Formát binary, pro i386:x86-64 O Je v něm funkce, nápověda: • Akceptuje dva int parametry a vrací int • Je „consf - tj. kromě parametrů nebere v úvahu nic O Zavolejte ji O Zjistěte, co dělá Jiri Slabý (Fakulta informatiky, MU) PB173/05 24. 9. 2015 19/19