DrawSquare ()가 DrawLine ()을 호출하는 Wikipedia에서 온 이 예제를 사용 하면 ,
이 다이어그램은 맨 아래에 높은 주소가 있고 맨 위에는 낮은 주소가 있습니다.
사람이 나를 설명 무엇을 할 수 ebp
와 esp
이러한 맥락에있다?
내가 본 것에서 스택 포인터는 항상 스택의 상단을 가리키고 기본 포인터는 현재 함수의 시작을 가리키는 것이라고 말하고 싶습니다. 또는 무엇을?
편집 : 나는 Windows 프로그램의 맥락에서 이것을 의미합니다.
edit2 : 그리고 어떻게 eip
작동합니까?
edit3 : MSVC ++에서 다음 코드가 있습니다.
var_C= dword ptr -0Ch
var_8= dword ptr -8
var_4= dword ptr -4
hInstance= dword ptr 8
hPrevInstance= dword ptr 0Ch
lpCmdLine= dword ptr 10h
nShowCmd= dword ptr 14h
그들 모두는 dwords 인 것처럼 보이므로 각각 4 바이트를 사용합니다. 따라서 hInstance에서 var_4와 4 바이트의 간격이 있음을 알 수 있습니다. 그들은 무엇인가? Wikipedia의 그림에서 볼 수 있듯이 반송 주소라고 가정합니까?
(편집자 주 : Michael의 답변에서 긴 인용문을 제거했습니다.이 질문에는 해당 질문에 속하지 않지만 후속 질문은 편집되었습니다.)
함수 호출의 흐름은 다음과 같습니다.
* Push parameters (hInstance, etc.)
* Call function, which pushes return address
* Push ebp
* Allocate space for locals
내 질문 (마지막, 나는 희망한다!)은, 내가 프롤로그의 끝까지 호출하고자하는 함수의 인수를 팝업하는 순간부터 정확히 어떻게됩니까? 나는 ebp, esp가 그 순간에 어떻게 진화하는지 알고 싶다. (나는 이미 프롤로그가 어떻게 작동하는지 이해했다.