Почему 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, ebpactaully перемещает значение вebptoesp. В более логичной (на мой взгляд) нотации AT&T это было быmov %ebp, %esp.