Почему leave делает "mov esp, ebp" в сборке x86?
говорят, что leave
инструкция такая же, как:
mov esp,ebp
pop ebp
но что такое mov esp,ebp
здесь? Это не кажется мне действительным...
3 ответа:
mov esp,ebp
устанавливает указатель стека на адрес базового кадра, эффективно освобождая весь кадр. (Не забывайте, что это синтаксис Intel, назначение на первом месте.) Если вы этого не сделали, сразу звонитеret
, вы все равно будете использовать фрейм стека вызываемой функции с вызывающей функцией, с последствиями crashtastic.
Я думаю, что ваша проблема заключается в том, что есть два разных способа написания ассемблера x86. Одним из них является в нотации&T и других обозначений процессоров Intel. Порядок аргументов в инструкции отменяется в нотации Intel в отличие от AT&T. ваша версия сборки, по-видимому, находится в нотации Intel, что означает, что
mov esp, ebp
actaully перемещает значение вebp
toesp
. В более логичной (на мой взгляд) нотации AT&T это было быmov %ebp, %esp
.