User Tools

Site Tools


event:codenight:programovani

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 video

event/codenight/programovani.txt · Last modified: 2015/06/07 17:46 by ruza