В этом видео попробуем проанализировать, как работает системный вызов sys_fork() на примере архитектуры x86 32bit,64bit.
Узнаем:
1. Что значит likely, unlikely в исходном коде ядра Linux.
2. Как разворачивать многоуровневые макросы #define, используемые в исходном коде ядра Linux.
3. Что означает символ решётки в #define.
4. Как увидеть результат работы препроцессора в C/C .
5. Что именно означает #include.
6. Как выбирать из множества вариантов определение функции/директивы в исходном коде ядра Linux.
7. Узнаем одно из применений атрибутов функций (__attribute__, доп. материал: ).
8. Рассмотрим, как читать встроенный в исходный код на C ассемблерный листинг (доп. материал: )
9. Узнаем, как выглядят директивы, с помощью которых задаются точки входа для системных вызовов (SYSCALL_DEFINE3(write, int, fd, ...))
10. Узнаем, на сколько важно помнить некоторые данные в оперативной памяти мозга, чтобы иметь возможность анализировать исходный код ядра Linux.
11. Узнаем, как скачать код ядра Linux без дополнительных ревизий.
В видео я забыл после сегментного регистра поставить двоеточие, должно быть в итоге так: movl %%gs:%P1, %0.
Это стандартный синтаксис ассемблера.
Работа с ctags для хождения по коду в vim’е: