Я совершенно новичок в ассемблере и хочу подтвердить, где в следующих утверждениях у меня есть недоразумение и что его нужно исправить.
Указатель стека (ESP
) указывает на вершину (самый низкий адрес памяти) стека.
Базовый указатель (EBP
) используется для временного хранения различных адресов памяти при построении кадра стека. Обычно он содержит самый высокий адрес памяти текущего кадра стека.
Указатель инструкции (EIP
) относится к адресу памяти строки кода в текстовом (кодовом) сегменте памяти.
После того, как что-то было помещено в стек, его нельзя изменить на месте. т.е. Если мы PUSH EBP
в стек, мы помещаем текущее значение EBP
, а не какую-то ссылку или указатель на него. Затем мы не можем изменить это значение на месте.
Аргументы, передаваемые в функцию, обычно перемещаются в адресное пространство, которое является смещением указателя стека. т.е. [ESP-12]
.
При вызове функции (используя CALL
) происходит следующее:
- Адрес возврата добавляется в стек (память адреса, следующего сразу за текущим
EIP
, чтобы мы знали, куда вернуться после завершения вызванной функции). - Сохраненный указатель фрейма добавляется в стек, который обычно является указателем стека фрейма стека вызывающей функции.
- Затем мы перейдем к прологу вызываемой функции.
Спасибо. Я пытаюсь разобраться в этом.