Что такое пролог и эпилог функций
Автор: S0ER
Когда разбирают код и смотрят на программу, написанную на языке ассемблера, часто можно увидеть повторяющиеся части кода. Эти части называются «пролог» и «эпилог». Давайте разберемся, что это такое и как они выглядят.
Что такое "Пролог"
Пролог и эпилог — это специальные куски кода, которые помогают организовать работу программы на самом низком уровне. Пролог обычно находится в начале функции и готовит всё необходимое для её выполнения.
Для x86 пролог выглядит следующим образом:
push rbp; инструкция push сохраняет в стеке значение rbp
mov rbp, rsp; копирует значение регистра указателя вершины стека (открытие кадра стека)
sub rsp, xx; выделяем память под локальные переменные
Здесь:
- rbp используется для адресации локальных переменных, должен быть сохранен в стеке;
- rsp используется для указания на вершину стека
Что такое "эпилог"
Эпилог, наоборот, находится в конце функции и завершает её работу. Он освобождает память, которую выделила функция, и приводит программу в исходное состояние.
Этр код, который закрывает кадр стека и восстанавливаем значние rpb
mov rsp, rbp
pop rbp
ret