어셈블리 소스입니다.
.386
.MODEL FLAT
PUBLIC _Emb
.CODE
_Emb PROC NEAR32
push ebp
mov ebp, esp
mov esp, [ebp] ;esp를 main ebp로 옮겨준다.
pushad ;스택에 레지스터 push
mov eax, [ebp + 4] ;return address 값 ebx로
push eax ;ip push
pushfd ;efl push
mov esp, ebp
pop ebp
ret
_Emb ENDP
END
수정(09.08)
mov esp, [ebp]
이 코드는 쓰면 안되는 코드입니다.
이유는 이 코드의 경우
변수가 1개라서 스택에서 변수의 위치가 가늠이 되는데
만약 변수가 많아 지게 된다면 위의 코드는 사용할 수 없게 됩니다.
(유동적인 코드가 아니네요) ;;
mov esp, [ebp+8]
add esp, 40
위의 코드는 인자를 이용해서 정확하게 변수의 꼭대기로 이동한다음
인자의 크기만큼 내려가기 때문에 좀 더 유동적이 됩니다.
금요일 수업중에 생각하다가 알게 되었습니다.
또한 push는 memory to memory가 가능 하기 때문에
push [ebp + 4]
이거 한줄만 써주면 되겠네요.
결론적으로는
mov esp, [ebp+8]
add esp, 40
pushad
push [ebp + 4]
pushfd
이 5줄이면 되겠습니다.