ПЛАН ЗА ЛЕКЦИЯТА "Компилируеми езици - сигурно програмиране - общи положения" ==================================================================== 1. Компилируеми езици - определение, основни принципи. Кое налага използването на компилируемите езици - предмиства и недостатъци. Що е то компилатор и що е то линкер. компилатор: - фронтенд - анализатори и парсери - лексикален, синтактичен, семантичен (смислов), генериране на междинен код; - бекенд - оптимизация; генериране на изходен код + допълнителна информация за линкера (генериране на обектен файл) линкер: - "подреждане" на обектния код и свеждането му до краен (машинен). - статично и динамично линкване (външни обекти) - преадресация на символите в крайния код Възможни проблеми при компилиране и линкване - примери с GNU C/C++/OBJ C compiler и GNU linker. - несъществуващи символи; - проблеми при оптимизация на код от компилатора; - пропуски при линкване - "забравени" библиотеки и/или обекти - GNU CC - проблем с платформите - obj C for Alpha; C++ for Alpha; OBJ не са стандартни; GNU Assembler (GAS) не поддържа PIC; aligment on SPARC (double is aligned to 8bit boundary), etc. 2. Основни понятия за архитектури: - класове памет - адресно пространство - защита на паметта - .text, .bss, .data (без подробности!) - понятие за stack. проблеми при използване на стек-а (няколко думи за теория на експлойтите - що е то програмен брояч и защо достъпа до неговото състояние в стека толкова радва хакерите). - heap - определение и за какво се използва. heap и stack - общи положения. посоки на нарастване на heap-a. - изпълнение и клониране на процес (таск, задача) - общи положения (с две думи). - memory mapping (mmap) - що е то и за какво служи (само за системи със защита на паметта).