#include <stdio.h>
int main(void)
{
00941870 push ebp
00941871 mov ebp,esp
00941873 sub esp,0C0h
00941879 push ebx
0094187A push esi
0094187B push edi
0094187C mov edi,ebp
0094187E xor ecx,ecx
00941880 mov eax,0CCCCCCCCh
00941885 rep stos dword ptr es:[edi]
00941887 mov ecx,offset _1C837AE4_StringPrintf@c (094C008h)
0094188C call @__CheckForDebuggerJustMyCode@4 (094132Ah)
00941891 nop
printf("I like programming\n");
00941892 push offset string "I like programming\n" (0947B30h)
00941897 call _printf (09410D2h)
0094189C add esp,4
printf("I love puppy!\n");
0094189F push offset string "I love puppy!\n" (0947B48h)
009418A4 call _printf (09410D2h)
009418A9 add esp,4
printf("I am so happy\n");
009418AC push offset string "I am so happy\n" (0947B5Ch)
009418B1 call _printf (09410D2h)
009418B6 add esp,4
return 0;
009418B9 xor eax,eax
}
009418BB pop edi
009418BC pop esi
009418BD pop ebx
009418BE add esp,0C0h
009418C4 cmp ebp,esp
009418C6 call __RTC_CheckEsp (094124Eh)
009418CB mov esp,ebp
009418CD pop ebp
009418CE ret
#include <stdio.h>
int main(void)
{
00CE1870 push ebp
00CE1871 mov ebp,esp
00CE1873 sub esp,0CCh
00CE1879 push ebx
00CE187A push esi
00CE187B push edi
00CE187C lea edi,[ebp-0Ch]
00CE187F mov ecx,3
00CE1884 mov eax,0CCCCCCCCh
00CE1889 rep stos dword ptr es:[edi]
00CE188B mov ecx,offset _358CD169_FormPrintf@c (0CEC008h)
00CE1890 call @__CheckForDebuggerJustMyCode@4 (0CE132Ah)
00CE1895 nop
int myAge = 12;
00CE1896 mov dword ptr [myAge],0Ch
printf("제 나이는 10진수로 %d살, 16진수로 %x살입니다 8진수: %o\n", myAge, myAge, myAge);
00CE189D mov eax,dword ptr [myAge]
00CE18A0 push eax
00CE18A1 mov ecx,dword ptr [myAge]
00CE18A4 push ecx
00CE18A5 mov edx,dword ptr [myAge]
00CE18A8 push edx
00CE18A9 push offset string "\xc1\xa6 \xb3\xaa\xc0\xcc\xb4\xc2 10\xc1\xf8\xbc\xf6\xb7\xce %d\xbb\xec, 16\xc1\xf8\xbc\xf6@"... (0CE7B30h)
00CE18AE call _printf (0CE10D2h)
00CE18B3 add esp,10h
return 0;
00CE18B6 xor eax,eax
}
00CE18B8 pop edi
00CE18B9 pop esi
00CE18BA pop ebx
00CE18BB add esp,0CCh
00CE18C1 cmp ebp,esp
00CE18C3 call __RTC_CheckEsp (0CE124Eh)
00CE18C8 mov esp,ebp
00CE18CA pop ebp
00CE18CB ret
#include <stdio.h>
int main(void)
{
00281870 push ebp
00281871 mov ebp,esp
00281873 sub esp,0CCh
00281879 push ebx
0028187A push esi
0028187B push edi
0028187C lea edi,[ebp-0Ch]
0028187F mov ecx,3
00281884 mov eax,0CCCCCCCCh
00281889 rep stos dword ptr es:[edi]
0028188B mov ecx,offset _1700396B_SimpleWhile@c (028C008h)
00281890 call @__CheckForDebuggerJustMyCode@4 (028132Ah)
00281895 nop
int num = 0;
00281896 mov dword ptr [num],0
while (num < 5)
0028189D cmp dword ptr [num],5
002818A1 jge __$EncStackInitStart+43h (02818BFh)
{
printf("Hello world!%d\n", num);
002818A3 mov eax,dword ptr [num]
002818A6 push eax
002818A7 push offset string "Hello world!%d\n" (0287B30h)
002818AC call _printf (02810D2h)
002818B1 add esp,8
num += 1;
002818B4 mov eax,dword ptr [num]
002818B7 add eax,1
002818BA mov dword ptr [num],eax
}
002818BD jmp __$EncStackInitStart+21h (028189Dh)
return 0;
002818BF xor eax,eax
}
002818C1 pop edi
002818C2 pop esi
002818C3 pop ebx
002818C4 add esp,0CCh
002818CA cmp ebp,esp
002818CC call __RTC_CheckEsp (028124Eh)
002818D1 mov esp,ebp
002818D3 pop ebp
002818D4 ret
#include <stdio.h>
int main(void)
{
00071960 push ebp
00071961 mov ebp,esp
00071963 sub esp,0DCh
00071969 push ebx
0007196A push esi
0007196B push edi
0007196C lea edi,[ebp-1Ch]
0007196F mov ecx,7
00071974 mov eax,0CCCCCCCCh
00071979 rep stos dword ptr es:[edi]
0007197B mov eax,dword ptr [__security_cookie (07A000h)]
00071980 xor eax,ebp
00071982 mov dword ptr [ebp-4],eax
00071985 mov ecx,offset _01ED43DE_NineNineDan@c (07C008h)
0007198A call @__CheckForDebuggerJustMyCode@4 (071339h)
0007198F nop
int dan, num = 1;
00071990 mov dword ptr [num],1
printf("몇 단? ");
00071997 push offset string "\xb8\xee \xb4\xdc? " (077B30h)
0007199C call _printf (0710DCh)
000719A1 add esp,4
scanf_s("%d", &dan);
000719A4 lea eax,[dan]
000719A7 push eax
000719A8 push offset string "%d" (077B3Ch)
000719AD call _scanf_s (071294h)
000719B2 add esp,8
while (num < 10)
000719B5 cmp dword ptr [num],0Ah
000719B9 jge __$EncStackInitStart+77h (0719E3h)
{
printf("%dX%d=%d\n", dan, num, dan * num);
000719BB mov eax,dword ptr [dan]
000719BE imul eax,dword ptr [num]
000719C2 push eax
000719C3 mov ecx,dword ptr [num]
000719C6 push ecx
000719C7 mov edx,dword ptr [dan]
000719CA push edx
000719CB push offset string "%dX%d=%d\n" (077B40h)
000719D0 call _printf (0710DCh)
000719D5 add esp,10h
num++;
000719D8 mov eax,dword ptr [num]
000719DB add eax,1
000719DE mov dword ptr [num],eax
}
000719E1 jmp __$EncStackInitStart+49h (0719B5h)
return 0;
000719E3 xor eax,eax
}
000719E5 push edx
000719E6 mov ecx,ebp
000719E8 push eax
000719E9 lea edx,ds:[71A14h]
000719EF call @_RTC_CheckStackVars@8 (0711F4h)
000719F4 pop eax
000719F5 pop edx
000719F6 pop edi
000719F7 pop esi
000719F8 pop ebx
000719F9 mov ecx,dword ptr [ebp-4]
000719FC xor ecx,ebp
000719FE call @__security_check_cookie@4 (071159h)
00071A03 add esp,0DCh
00071A09 cmp ebp,esp
00071A0B call __RTC_CheckEsp (071258h)
00071A10 mov esp,ebp
00071A12 pop ebp
00071A13 ret
* _RTC_CheckStackVars
Microsoft의 런타임 검증 도구(RTC, Runtime Checks) 중 하나로,
디버깅 빌드에서 스택 변수의 초기화 상태와 무결성을 검사하는 함수
#include <stdio.h>
int main(void)
{
00FE1870 push ebp
00FE1871 mov ebp,esp
00FE1873 sub esp,0D8h
00FE1879 push ebx
00FE187A push esi
00FE187B push edi
00FE187C lea edi,[ebp-18h]
00FE187F mov ecx,6
00FE1884 mov eax,0CCCCCCCCh
00FE1889 rep stos dword ptr es:[edi]
00FE188B mov ecx,offset _3C2DE127_TwoToNine@c (0FEC008h)
00FE1890 call @__CheckForDebuggerJustMyCode@4 (0FE132Ah)
00FE1895 nop
int cur = 2;
00FE1896 mov dword ptr [cur],2
int is = 0;
00FE189D mov dword ptr [is],0
while (cur < 10) // 2단부터 9단까지 반복
00FE18A4 cmp dword ptr [cur],0Ah
00FE18A8 jge __$EncStackInitStart+7Bh (0FE18F7h)
{
is = 1; // 새로운 단의 시작을 위하여
00FE18AA mov dword ptr [is],1
while (is < 10) // 각 단의 1부터 9의 곱을 표현
00FE18B1 cmp dword ptr [is],0Ah
00FE18B5 jge __$EncStackInitStart+63h (0FE18DFh)
{
printf("%dX%d=%d\n", cur, is, cur * is);
00FE18B7 mov eax,dword ptr [cur]
00FE18BA imul eax,dword ptr [is]
00FE18BE push eax
00FE18BF mov ecx,dword ptr [is]
00FE18C2 push ecx
00FE18C3 mov edx,dword ptr [cur]
00FE18C6 push edx
00FE18C7 push offset string "%dX%d=%d\n" (0FE7B30h)
00FE18CC call _printf (0FE10D2h)
00FE18D1 add esp,10h
is++;
00FE18D4 mov eax,dword ptr [is]
00FE18D7 add eax,1
00FE18DA mov dword ptr [is],eax
}
00FE18DD jmp __$EncStackInitStart+35h (0FE18B1h)
cur++; // 다음 단으로 넘어가기 위한 증가
00FE18DF mov eax,dword ptr [cur]
00FE18E2 add eax,1
00FE18E5 mov dword ptr [cur],eax
printf("\n");
00FE18E8 push offset string "\n" (0FE7B3Ch)
00FE18ED call _printf (0FE10D2h)
00FE18F2 add esp,4
}
00FE18F5 jmp __$EncStackInitStart+28h (0FE18A4h)
return 0;
00FE18F7 xor eax,eax
}
00FE18F9 pop edi
00FE18FA pop esi
00FE18FB pop ebx
00FE18FC add esp,0D8h
00FE1902 cmp ebp,esp
00FE1904 call __RTC_CheckEsp (0FE124Eh)
00FE1909 mov esp,ebp
00FE190B pop ebp
00FE190C ret
#include <stdio.h>
int main(void)
{
00281960 push ebp
00281961 mov ebp,esp
00281963 sub esp,0DCh
00281969 push ebx
0028196A push esi
0028196B push edi
0028196C lea edi,[ebp-1Ch]
0028196F mov ecx,7
00281974 mov eax,0CCCCCCCCh
00281979 rep stos dword ptr es:[edi]
0028197B mov eax,dword ptr [__security_cookie (028A000h)]
00281980 xor eax,ebp
00281982 mov dword ptr [ebp-4],eax
00281985 mov ecx,offset _0C6286EB_UsefulDoWhile@c (028C008h)
0028198A call @__CheckForDebuggerJustMyCode@4 (0281339h)
0028198F nop
int total = 0, num = 0;
00281990 mov dword ptr [total],0
00281997 mov dword ptr [num],0
do
{
printf("정수 입력(0 to quit): ");
0028199E push offset string "\xc1\xa4\xbc\xf6 \xc0\xd4\xb7\xc2(0 to quit): " (0287B30h)
002819A3 call _printf (02810DCh)
002819A8 add esp,4
scanf_s("%d", &num);
002819AB lea eax,[num]
002819AE push eax
002819AF push offset string "%d" (0287B4Ch)
002819B4 call _scanf_s (0281294h)
002819B9 add esp,8
total += num;
002819BC mov eax,dword ptr [total]
002819BF add eax,dword ptr [num]
002819C2 mov dword ptr [total],eax
} while (num != 0);
002819C5 cmp dword ptr [num],0
002819C9 jne __$EncStackInitStart+32h (028199Eh)
printf("합계 : %d\n", total);
002819CB mov eax,dword ptr [total]
002819CE push eax
002819CF push offset string "\xc7\xd5\xb0\xe8 : %d\n" (0287B50h)
002819D4 call _printf (02810DCh)
002819D9 add esp,8
return 0;
002819DC xor eax,eax
}
002819DE push edx
002819DF mov ecx,ebp
002819E1 push eax
002819E2 lea edx,ds:[281A10h]
002819E8 call @_RTC_CheckStackVars@8 (02811F4h)
002819ED pop eax
002819EE pop edx
002819EF pop edi
002819F0 pop esi
002819F1 pop ebx
002819F2 mov ecx,dword ptr [ebp-4]
002819F5 xor ecx,ebp
002819F7 call @__security_check_cookie@4 (0281159h)
002819FC add esp,0DCh
00281A02 cmp ebp,esp
00281A04 call __RTC_CheckEsp (0281258h)
00281A09 mov esp,ebp
00281A0B pop ebp
00281A0C ret
#include <stdio.h>
int main(void)
{
00281960 push ebp
00281961 mov ebp,esp
00281963 sub esp,0DCh
00281969 push ebx
0028196A push esi
0028196B push edi
0028196C lea edi,[ebp-1Ch]
0028196F mov ecx,7
00281974 mov eax,0CCCCCCCCh
00281979 rep stos dword ptr es:[edi]
0028197B mov eax,dword ptr [__security_cookie (028A000h)]
00281980 xor eax,ebp
00281982 mov dword ptr [ebp-4],eax
00281985 mov ecx,offset _0C6286EB_UsefulDoWhile@c (028C008h)
0028198A call @__CheckForDebuggerJustMyCode@4 (0281339h)
0028198F nop
int total = 0, num = 0;
00281990 mov dword ptr [total],0
00281997 mov dword ptr [num],0
do
{
printf("정수 입력(0 to quit): ");
0028199E push offset string "\xc1\xa4\xbc\xf6 \xc0\xd4\xb7\xc2(0 to quit): " (0287B30h)
002819A3 call _printf (02810DCh)
002819A8 add esp,4
scanf_s("%d", &num);
002819AB lea eax,[num]
002819AE push eax
002819AF push offset string "%d" (0287B4Ch)
002819B4 call _scanf_s (0281294h)
002819B9 add esp,8
total += num;
002819BC mov eax,dword ptr [total]
002819BF add eax,dword ptr [num]
002819C2 mov dword ptr [total],eax
} while (num != 0);
002819C5 cmp dword ptr [num],0
002819C9 jne __$EncStackInitStart+32h (028199Eh)
printf("합계 : %d\n", total);
002819CB mov eax,dword ptr [total]
002819CE push eax
002819CF push offset string "\xc7\xd5\xb0\xe8 : %d\n" (0287B50h)
002819D4 call _printf (02810DCh)
002819D9 add esp,8
return 0;
002819DC xor eax,eax
}
002819DE push edx
002819DF mov ecx,ebp
002819E1 push eax
002819E2 lea edx,ds:[281A10h]
002819E8 call @_RTC_CheckStackVars@8 (02811F4h)
002819ED pop eax
002819EE pop edx
002819EF pop edi
002819F0 pop esi
002819F1 pop ebx
002819F2 mov ecx,dword ptr [ebp-4]
002819F5 xor ecx,ebp
002819F7 call @__security_check_cookie@4 (0281159h)
002819FC add esp,0DCh
00281A02 cmp ebp,esp
00281A04 call __RTC_CheckEsp (0281258h)
00281A09 mov esp,ebp
00281A0B pop ebp
00281A0C ret
#include <stdio.h>
int main(void)
{
004A1960 push ebp
004A1961 mov ebp,esp
004A1963 sub esp,0F0h
004A1969 push ebx
004A196A push esi
004A196B push edi
004A196C lea edi,[ebp-30h]
004A196F mov ecx,0Ch
004A1974 mov eax,0CCCCCCCCh
004A1979 rep stos dword ptr es:[edi]
004A197B mov eax,dword ptr [__security_cookie (04AA000h)]
004A1980 xor eax,ebp
004A1982 mov dword ptr [ebp-4],eax
004A1985 mov ecx,offset _0D0A2CD4_RealMean@c (04AC008h)
004A198A call @__CheckForDebuggerJustMyCode@4 (04A1339h)
004A198F nop
double total = 0.0;
004A1990 xorps xmm0,xmm0
004A1993 movsd mmword ptr [total],xmm0
double input = 0.0;
004A1998 xorps xmm0,xmm0
004A199B movsd mmword ptr [input],xmm0
int num = 0;
004A19A0 mov dword ptr [num],0
for (; input >= 0.0;)
004A19A7 movsd xmm0,mmword ptr [input]
004A19AC comisd xmm0,mmword ptr [__real@0000000000000000 (04A7B68h)]
004A19B4 jb __$EncStackInitStart+82h (04A19EEh)
{
total += input;
004A19B6 movsd xmm0,mmword ptr [total]
004A19BB addsd xmm0,mmword ptr [input]
004A19C0 movsd mmword ptr [total],xmm0
printf("실수 입력(minus to quit) : ");
004A19C5 push offset string "\xbd\xc7\xbc\xf6 \xc0\xd4\xb7\xc2(minus to quit) : " (04A7B30h)
004A19CA call _printf (04A10DCh)
004A19CF add esp,4
scanf_s("%lf", &input);
004A19D2 lea eax,[input]
004A19D5 push eax
004A19D6 push offset string "%lf" (04A7B54h)
004A19DB call _scanf_s (04A1294h)
004A19E0 add esp,8
num++;
004A19E3 mov eax,dword ptr [num]
004A19E6 add eax,1
004A19E9 mov dword ptr [num],eax
}
004A19EC jmp __$EncStackInitStart+3Bh (04A19A7h)
printf("평균: %f\n", total / (num - 1));
004A19EE mov eax,dword ptr [num]
004A19F1 sub eax,1
004A19F4 cvtsi2sd xmm0,eax
004A19F8 movsd xmm1,mmword ptr [total]
004A19FD divsd xmm1,xmm0
004A1A01 sub esp,8
004A1A04 movsd mmword ptr [esp],xmm1
004A1A09 push offset string "\xc6\xf2\xb1\xd5: %f\n" (04A7B58h)
004A1A0E call _printf (04A10DCh)
004A1A13 add esp,0Ch
return 0;
004A1A16 xor eax,eax
}
004A1A18 push edx
004A1A19 mov ecx,ebp
004A1A1B push eax
004A1A1C lea edx,ds:[4A1A48h]
004A1A22 call @_RTC_CheckStackVars@8 (04A11F4h)
004A1A27 pop eax
004A1A28 pop edx
004A1A29 pop edi
004A1A2A pop esi
004A1A2B pop ebx
004A1A2C mov ecx,dword ptr [ebp-4]
004A1A2F xor ecx,ebp
004A1A31 call @__security_check_cookie@4 (04A1159h)
004A1A36 add esp,0F0h
004A1A3C cmp ebp,esp
004A1A3E call __RTC_CheckEsp (04A1258h)
004A1A43 mov esp,ebp
004A1A45 pop ebp
004A1A46 ret
* cvtsi2sd(Convert Integer to Scalar Double-Precision Floating-Point Value)
정수를 스칼라(double- precision) 부동소수점 값으로 변환하는 명령어
* movsd(Move Scalar Double-Precision Floating-Point Value)
스칼라(double- precision) 부동소수점 값을 복사(이동)하는 명령어
* mmword
64비트 단위 데이터를 가리키는 데이터 크기 지정자
#include <stdio.h>
int main(void)
{
00041870 push ebp
00041871 mov ebp,esp
00041873 sub esp,0D8h
00041879 push ebx
0004187A push esi
0004187B push edi
0004187C lea edi,[ebp-18h]
0004187F mov ecx,6
00041884 mov eax,0CCCCCCCCh
00041889 rep stos dword ptr es:[edi]
0004188B mov ecx,offset _C11275EC_TwoToNineForVer@c (04C008h)
00041890 call @__CheckForDebuggerJustMyCode@4 (04132Ah)
00041895 nop
int cur, is;
for (cur = 2; cur < 10; cur++)
00041896 mov dword ptr [cur],2
0004189D jmp __$EncStackInitStart+2Ch (0418A8h)
0004189F mov eax,dword ptr [cur]
000418A2 add eax,1
000418A5 mov dword ptr [cur],eax
000418A8 cmp dword ptr [cur],0Ah
000418AC jge __$EncStackInitStart+78h (0418F4h)
{
for (is = 1; is < 10; is++)
000418AE mov dword ptr [is],1
000418B5 jmp __$EncStackInitStart+44h (0418C0h)
000418B7 mov eax,dword ptr [is]
000418BA add eax,1
000418BD mov dword ptr [is],eax
000418C0 cmp dword ptr [is],0Ah
000418C4 jge __$EncStackInitStart+69h (0418E5h)
printf("%dX%d=%d\n", cur, is, cur * is);
000418C6 mov eax,dword ptr [cur]
000418C9 imul eax,dword ptr [is]
000418CD push eax
000418CE mov ecx,dword ptr [is]
000418D1 push ecx
000418D2 mov edx,dword ptr [cur]
000418D5 push edx
000418D6 push offset string "%dX%d=%d\n" (047B30h)
000418DB call _printf (0410D2h)
000418E0 add esp,10h
000418E3 jmp __$EncStackInitStart+3Bh (0418B7h)
printf("\n");
000418E5 push offset string "\n" (047B3Ch)
000418EA call _printf (0410D2h)
000418EF add esp,4
}
000418F2 jmp __$EncStackInitStart+23h (04189Fh)
}
000418F4 xor eax,eax
000418F6 pop edi
000418F7 pop esi
000418F8 pop ebx
000418F9 add esp,0D8h
000418FF cmp ebp,esp
00041901 call __RTC_CheckEsp (04124Eh)
00041906 mov esp,ebp
00041908 pop ebp
00041909 ret
'IT공부 > IT서적' 카테고리의 다른 글
[윤성우 열혈 C프로그래밍] 디버깅 빌드, 어셈블리 코드 - Chapter9 (0) | 2025.01.18 |
---|---|
[윤성우 열혈 C프로그래밍] 디버깅 빌드, 어셈블리 코드 - Chapter8 (0) | 2025.01.16 |
[윤성우 열혈 C프로그래밍] 디버깅 빌드, 어셈블리 코드 - Chapter5 (0) | 2025.01.13 |
[윤성우 열혈 C프로그래밍] 디버깅 빌드, 어셈블리 코드 - Chapter4 (0) | 2025.01.12 |
[윤성우 열혈 C프로그래밍] 디버깅 빌드, 어셈블리 코드 - Chapter1, Chapter2, Chapter3 (0) | 2025.01.12 |