Základy x86 assembleru (1-2 večery)
Sylabus:
Základní kurz architektury x86 / x86_64 - nebudou z vás zruční assembleroví programátoři, ale se štěstím budete schopni pochopit, co nějaká jednodušší posloupnost instrukcí (třeba disassemblovaná funkce) dělá
AT&T vs. Intel syntax assembleru
Registry, zásobník
Paměť a její adresování, režimy procesoru (stručně)
Základní instrukční sada; přesuny dat, aritmetika, skoky, cykly
Testy a příznaky
Binární kódování instrukcí (stručně)
GNU toolchain: Překlad assembleru, disassemblování, cvičení
SystemV ABI
Funkce v assembleru: předávání parametrů, zásobník podruhé (stack frames)
Systémová volání: předávání parametrů, návratová hodnota, příklady
FP, MMX, SSE, AVX registry a instrukce (stručně)
Je dobré mít s sebou linuxový notebook, není to ale nutné (na cvičné úlohy asi bude čas až na konci sezení pozdě večer). Odhadovaná délka cca 2.5h.
Jazyk C pořádně (1-2 večery)
Není určeno pro úplné začátečníky (to asi lze změnit, bude-li poptávka) - očekává se, že máte s C praktickou zkušenost, už jste v C pár programů napsali a víte, jak se používá printf(), jak se zhruba pracuje s poli a pointery a co je to Cčkový string
Účel je znalosti Cčka shrnout, zesystematizovat, rozšířit - povíme si něco o Cčkové specifikaci (specifikacích), všechny základní Cčkové koncepty projdeme znovu, vysvětlíme pořádně typový systém (jak číst složité deklarace?), co je a co není definované, vysvětlíme původ některých temnějších aspektů jazyka, co umí preprocesor, šikovná GNU rozšíření, průvodce standardními hlavičkovými soubory
-
Perl Crash Course (1-2 večery)
Praktický úvod do jazyka Perl 5; očekává se zkušenost s programováním a základní znalost regulárních výrazů
Syntaxe, typy proměnných (skalár, list, hash; kontext; proměnná $_), základní příkazy a operátory, cykly a podmínky; perldoc
Perlové regulární výrazy a jejich použití
Onelinery, implicitní cyklus
Složitější datové struktury, reference; Data::Dump
Základní práce se soubory: filehandles
Funkce, práce s parametry
Anonymní funkce, práce se seznamy pomocí map, grep, sort
Jemný úvod do perlových modulů; packages, CPAN
Pokročilejší témata dle zájmu:
Jemný úvod do perlového objektového systému; Moose
Základní práce s databázemi; DBI
Asynchronní programy; POE (brmdoor)
Výjimky: eval + die :)
Lowlevel Linux Userspace (dva večery?)
Vnitřnosti Linuxu pohledem aplikačního programátora; prerekvizita: znalosti v rozsahu přednášky “Základy x86 assembleru”, základy UNIXu a praktické zkušenosti s jazykem C
Standardy, POSIX, SystemV ABI
Rozhraní jádra
Systémová volání
Syscall ptrace() for fun'n'profit
Syscall mmap() for fun'n'profit
Signály jako rozhraní pro předávání zpráv
Trap signály SIGILL a SIGSEGV
Formát ELF
Toolchain pro překlad Cčkových programů
Co se děje při spouštění programu: execve(), binfmt handler, parametry předávané programu, crt1
Dynamický linker ld.so a jeho praktické featury
Symboly, relokace, GOT
Case studies: retty, linuxtycoon, screenenv
recording: http://nat.brmlab.cz/talks/2013-12-11-assembler.mkv