2017-03-13 2 views
0

어셈블리 언어에 대한 이해를 돕고 자합니다. 나는 함수가 스택 프레임을 생성 할 때 스택 포인터 값을 EBP에 복사하는 것보다 현재 EBP을 푸시합니다. 첫 번째 (및 유일한) 함수 매개 변수는 EBP + 8에 의해 액세스됩니다. 그런데 왜 8? EBP을 푸시 한 후 다음 값은 논리적으로 4 오프셋됩니다. 많은 웹 페이지를 읽었지만이 부분을 이해하지 못하는 것 같습니다.x86 어셈블리의 첫 번째 매개 변수가 오프셋 8에서 시작하는 이유는 무엇입니까?

답변

2

"누락 된"DWORD는 반송 주소입니다. 호출 스택과 같다 스택 공간이기 때문에 함수는 로컬 변수를 사용하는 경우

ebp  : saved ebp 
ebp + 4 : return address 
ebp + 8 : pushed parameter 

그리고 (통상적으로) 스택 프레임 후에 그 예약 그들이 참조하는 ebp - xx로서 :

ebp - 8 : second local 
ebp - 4 : first local 
ebp  : saved ebp 
ebp + 4 : return address 
ebp + 8 : pushed parameter 
+0

감사 당신. 나는 잘못된 부분에 집중했다. (규칙을 부르는 것에 대해 읽었지만, 기본적인 것을 잊었다.) – Inline