본문/내용
1. Q1_01
디버거로 레지스터 값의 변화를 확인, 문서로 작성
-소스 코드
INCLUDE Irvine32.inc
.code
main PROC
call MySub
exit
main ENDP
MySub PROC
push () ; 에 들어갈 값 ebp
mov ebp,() ; 에 들어갈 값 esp
sub esp,8
mov DWORD PTR [ebp-4],20
mov DWORD PTR [ebp-8],10
mov (),ebp ; 에 들어갈 값 esp
pop () ; 에 들어갈 값 ebp
ret
MySub ENDP
END main
-코드 설명
우선 main 프로시저부터 프로그램이 실행하면 MySub 프로시저를 호출한다. 다른 프로시저를 호출하면 stack에 return address값이 저장된다. 이제 MySub 프로시저로 넘어가서 stack에 ebp를 push한다. ebp는 base pointer로 스택에 저장하여 기존의 값을 보존하기위해 사용된다. 그 다음 esp의 값을 ebp에 복사한다. 그 다음 esp에 8을 빼주는데, 그러면 스택의 구조는 아래와 같다.
return address
ebp
`- ebp
20
10
`- esp
return address
ebp
`- ebp
`- esp
현재 esp는 스택의 빈공간을 가리키는데, 다음명령에서 [eb…
ebp
2. Q1_02