==== 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 * Trochu podle http://mj.ucw.cz/papers/cecko.pdf ==== 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 {{tag>video}}