developer tip

x86 어셈블리에서 leave가 "mov esp, ebp"를 수행하는 이유는 무엇입니까?

optionbox 2020. 11. 28. 09:09
반응형

x86 어셈블리에서 leave가 "mov esp, ebp"를 수행하는 이유는 무엇입니까?


말했다 것 leave명령과 동일합니다 :

mov esp,ebp
pop ebp

하지만 여기는 무엇 mov esp,ebp입니까? 나에게는 유효하지 않은 것 같습니다 ...


mov esp,ebp스택 포인터를 기본 프레임 주소로 설정하여 전체 프레임을 효과적으로 해제합니다. (이것이 Intel 구문이라는 것을 잊지 마십시오. 대상이 먼저옵니다.) 이렇게하지 ret않으면를 호출하면 호출 함수와 함께 호출 된 함수의 스택 프레임을 계속 사용하고 충돌 결과를 초래합니다.


귀하의 문제는 x86 어셈블리를 작성하는 두 가지 다른 방법이 있다는 사실이라고 생각합니다. 하나는 AT & T 표기법이고 다른 하나는 Intel 표기법입니다. 명령에 대한 인수의 순서는 AT & T와 달리 Intel 표기법에서 반대입니다. 사용자의 어셈블리 버전은 Intel 표기법으로 표시 됩니다 . mov esp, ebp즉, 값 ebpesp. 더 논리적 인 (내 의견으로는) AT & T 표기법에서는 mov %ebp, %esp.


컴파일러는이 명령어를 사용하여 스택의 함수에서 사용 된 공간을 확보합니다. leave명령어는와 동일한 동작을 mov esp, ebp합니다 pop ebp.

참고 URL : https://stackoverflow.com/questions/5474355/why-does-leave-do-mov-esp-ebp-in-x86-assembly

반응형