☞ Breakpoint 걸어서 디버깅모드를 실행시킨 후 메뉴탭에서 Debug → Windows → Disassembly 실행하면 소스코드를 어셈블리어로 볼수 있음 (Visual Studio 2010 의 경우)
※ dword : 4바이트 int main() { 00412F10 push ebp 00412F11 mov ebp,esp 00412F13 sub esp,0D8h 00412F19 push ebx 00412F1A push esi 00412F1B push edi 00412F1C lea edi,[ebp-0D8h] 00412F22 mov ecx,36h 00412F27 mov eax,0CCCCCCCCh 00412F2C rep stos dword ptr es:[edi] int a = 100; 00412F2E mov dword ptr [a],64h int b = 200; 00412F35 mov dword ptr [b],0C8h a = a+1; 00412F3C mov eax,dword ptr [a] a의 메모리 위치에서 값을 레지스터(eax)로 가져옴
00412F3F add eax,1 1를 더함 00412F42 mov dword ptr [a],eax a의 메모리 위치에 레지스터(eax)에 있는 더해진 값을 넣음 ++a; 00412F45 mov eax,dword ptr [a] 00412F48 add eax,1 00412F4B mov dword ptr [a],eax a++; 00412F4E mov eax,dword ptr [a] 00412F51 add eax,1 00412F54 mov dword ptr [a],eax a = a+1 , ++a , a++ 는 어셈블리어로 보면 같다는 것을 알수있음
a = b+a; 00412F57 mov eax,dword ptr [b] b의 메모리 위치에서 값을 레지스터(eax)로 가져옴 00412F5A add eax,dword ptr [a] a의 값을 레지스터(eax)의 값과 더하여 레지스터(eax)에 임시저장해둠 00412F5D mov dword ptr [a],eax 레지스터(eax)의 값을 a의 메모리 위치에 넣음 b = a; 00412F60 mov eax,dword ptr [a] a의 메모리 위치에서 값을 레지스터(eax)로 가져옴 00412F63 mov dword ptr [b],eax 레지스터(eax)의 값을 b의 메모리 위치에 넣음 printf("a : %08X\n", &a); 00412F66 mov esi,esp 00412F68 lea eax,[a] 00412F6B push eax 00412F6C push offset string "a : %08X\n" (41573Ch) 00412F71 call dword ptr [__imp__printf (4182B0h)] 00412F77 add esp,8 00412F7A cmp esi,esp 00412F7C call @ILT+295(__RTC_CheckEsp) (41112Ch) return 0; 00412F81 xor eax,eax
}
|