비주얼스튜디오 10.0에서 Disassembly로 소스코드 분석하는 법

2013. 8. 21. 11:22스마트콘트롤러/어셈블리

Disassembly로 소스코드 분석!!

 

 

☞ 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

}