코스웨어/13년 스마트컨트롤러
20130916 어셈블리 - 전영기
알 수 없는 사용자
2013. 9. 16. 18:40
728x90
반응형
push ebp
mov ebp, esp
push eax
push ecx
push edx
pushfd ;기존 플래그비트를 저장하기 위함이다. 도중에 add 연산자가 있어 플래그비트를 바꿔버린다.
push ebx
mov ebx, esp ;esp를 ebx에 저장
mov esp, [ebp + 8]
add esp, 40
push eax ;순차로 넣기
push ecx
push edx
mov esp, ebx ;esp복구
pop ebx ;ebp복구
pop edx ;flag bit edx에 저장
mov eax, esp ;eax에 esp저장
mov esp, [ebp + 8]
add esp, 28
push ebx ;순차적으로 넣기
mov ecx, ebp ;초기 esp주소
add ecx, 12
push ecx
mov ecx, [ebp] ; 초기 ebp
push ecx
push esi
push edi
mov ecx, [ebp + 4] ;eip주소
push ecx
push edx ;flag bit
mov esp, eax ;esp 복구
pop edx ; 레지스터 값 복구
pop ecx
pop eax
mov esp, ebp
pop ebp
ret
pusha 라는 명령어를 사용하는것을 봤었는데,
저는 그냥 순차적으로 push를 이용해서 만들었습니다.
esp랑 ebp의 값이 pusha를 사용하면 제대로 들어가지 않기 때문입니다.
728x90