Что такое пролог и эпилог функций

Автор: S0ER

Когда разбирают код и смотрят на программу, написанную на языке ассемблера, часто можно увидеть повторяющиеся части кода. Эти части называются «пролог» и «эпилог». Давайте разберемся, что это такое и как они выглядят.

Что такое "Пролог"

Пролог и эпилог — это специальные куски кода, которые помогают организовать работу программы на самом низком уровне. Пролог обычно находится в начале функции и готовит всё необходимое для её выполнения.

Для x86 пролог выглядит следующим образом:

push rbp; инструкция push сохраняет в стеке значение rbp
mov rbp, rsp; копирует значение регистра указателя вершины стека (открытие кадра стека)
sub rsp, xx; выделяем память под локальные переменные

Здесь:

  1. rbp используется для адресации локальных переменных, должен быть сохранен в стеке;
  2. rsp используется для указания на вершину стека

Что такое "эпилог"

Эпилог, наоборот, находится в конце функции и завершает её работу. Он освобождает память, которую выделила функция, и приводит программу в исходное состояние.

Этр код, который закрывает кадр стека и восстанавливаем значние rpb

mov rsp, rbp
pop rbp
ret