일반적 방법 | ENTER 명령어 사용 |
push ebp mov ebp,esp sub esp,4 | enter 4,0 |
if 먼저 아래처럼 asm 코드를 작성 한다고 했을 때
_asm {
enter 4, 0 0)
enter 4, 1 1)
enter 4, 2 2)
enter 4, 3 3)
enter 4, 4 4)
enter 4, 5 5)
}
먼저 아래처럼 asm 코드를 작성 한다고 했을 때 아래 처럼 실제 메모리 주소에 이전 ebp 값들이 어떻게 쌓이는지 확인 할 수가 있으며 이 값들로 한 함수 내에서 아래와 같은 괄호로 묶은 지역 변수들을 참조 할 수 있는 형태를 구성 할 수 있다
void stackFrameTestFunc()
{
int a=0;
{
int b=0;
{
int c=0;
a=3;
b=4;
}
}
}
}
먼저 이전 스택영역으로 되돌아 가기전에 enter 명령어가 수행 되면 push ebp 가
기본 수행 된 다음 이전 ebp 를 넣는 처리를 하게 된다
왼쪽 굵은 글자 0x00000000 는 실제 메모리 주소를 말한다
오른쪽 주소는 해당 메모리 주소에 들어가있는 값
| 5) 0X0078F794 0X0078F798 0078F7AC //현재 ebp 0X0078F79C 0078F7C4 //이전 ebp 0X0078F7A0 0078F7D8 //이전전 ebp 0X0078F7A4 0078F7E8 //이전전전 ebp 0X0078F7A8 0078F7F4 //이전전전전 ebp 0X0078F7AC 0078F7C4 //이전 ebp enter 4, 5 5)
4) 0X0078F7B0 0X0078F7B4 0078F7C4 //현재 ebp 0X0078F7B8 0078F7D8 //이전 ebp 0X0078F7BC 0078F7E8 //이전전 ebp 0X0078F7C0 0078F7F4 //이전전전 ebp 0X0078F7C4 0078F7D8 //이전 ebp enter 4, 4 4) 3) 0X0078F7C8 0X0078F7CC 0078F7D8 //현재 ebp 0X0078F7D0 0078F7E8 //이전 ebp 0X0078F7D4 0078F7F4 //이전전 ebp 0X0078F7D8 0078F7E8 //이전 ebp enter 4, 3 3)
2) 0X0078F7DC 0X0078F7E0 0078F7E8 //현재 ebp 0X0078F7E4 0078F7F4 //이전 ebp 0X0078F7E8 0078F7F4 //이전 ebp enter 4, 2 2)
1) 0X0078F7EC 0X0078F7F0 0078F7F4 //현재 ebp 0X0078F7F4 0078F7FC //이전 ebp enter 4, 1 1) 0) 0X0078F7F8 0X0078F7FC 0078F8CC //이전 ebp enter 4, 0 0)
|
'프로그래밍(Programming) > 어셈블리어(asm)' 카테고리의 다른 글
FPU 에서 값비교(fcmp) 하여 CPU 단에서 점프하기 (0) | 2017.03.13 |
---|---|
x86 명령어 셋 레퍼런스 (0) | 2017.03.04 |
VisualStudio2015 어셈블러 하이라이트 설정 (0) | 2017.03.01 |
_asm{ lea 와 mov 에서 [] 의 의미의 차이 } (0) | 2017.03.01 |
어셈블리어단에서의 스텍프레임과 함수 호출 call, ret, ebp, esp, eip (0) | 2017.02.26 |