반응형
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
즉, 값 ebp
을 esp
. 더 논리적 인 (내 의견으로는) 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
반응형
'developer tip' 카테고리의 다른 글
YouTube : 음소거 된 동영상 임베드 방법 (0) | 2020.11.29 |
---|---|
파일 내에서 문자열의 발생을 어떻게 계산할 수 있습니까? (0) | 2020.11.29 |
HTML5 속성을 인용합니까? (0) | 2020.11.28 |
파이썬의 제네릭 / 템플릿? (0) | 2020.11.28 |
파이썬에서 float에 대한 내장 pow ()와 math.pow ()의 차이점은 무엇입니까? (0) | 2020.11.28 |