assembly/sample/win32
|
Win32 › WinPcap › Z1670 › aquamp playlist002 › assembly › assembly/sample/win32 1 InitInstance ¶//
// 함수: InitInstance(HANDLE, int)
//
// 목적: 인스턴스 핸들을 저장하고 주 창을 만듭니다.
//
// 설명:
//
// 이 함수를 통해 인스턴스 핸들을 전역 변수에 저장하고
// 주 프로그램 창을 만든 다음 표시합니다.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // 인스턴스 핸들을 전역 변수에 저장합니다.
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
00401000 >/$ 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4] 00401004 |. 56 PUSH ESI 00401005 |. 6A 00 PUSH 0 ; /lParam = NULL 00401007 |. 50 PUSH EAX ; |hInst 00401008 |. 6A 00 PUSH 0 ; |hMenu = NULL 0040100A |. 6A 00 PUSH 0 ; |hParent = NULL 0040100C |. 6A 00 PUSH 0 ; |Height = 0 0040100E |. 68 00000080 PUSH 80000000 ; |Width = 80000000 (-2147483648.) 00401013 |. 6A 00 PUSH 0 ; |Y = 0 00401015 |. 68 00000080 PUSH 80000000 ; |X = 80000000 (-2147483648.) 0040101A |. 68 0000CF00 PUSH 0CF0000 ; |Style = WS_OVERLAPPED|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU|WS_THICKFRAME|WS_CAPTION 0040101F |. 68 08734000 PUSH OFFSET szTitle ; |WindowName = "" 00401024 |. 68 A0724000 PUSH OFFSET szWindowClass ; |Class = "" 00401029 |. 6A 00 PUSH 0 ; |ExtStyle = 0 0040102B |. A3 6C734000 MOV DWORD PTR DS:[hInst],EAX ; | 00401030 |. FF15 04514000 CALL DWORD PTR DS:[<&USER32.CreateWin>; \CreateWindowExA 00401036 |. 8BF0 MOV ESI,EAX 00401038 |. 85F6 TEST ESI,ESI 0040103A |. 75 02 JNZ SHORT 0040103E 0040103C |. 5E POP ESI 0040103D |. C3 RETN 0040103E |> 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C] 00401042 |. 50 PUSH EAX ; /ShowState 00401043 |. 56 PUSH ESI ; |hWnd 00401044 |. FF15 08514000 CALL DWORD PTR DS:[<&USER32.ShowWindo>; \ShowWindow 0040104A |. 56 PUSH ESI ; /hWnd 0040104B |. FF15 0C514000 CALL DWORD PTR DS:[<&USER32.UpdateWin>; \UpdateWindow 00401051 |. B8 01000000 MOV EAX,1 00401056 |. 5E POP ESI 00401057 \. C3 RETN 2 About ¶// 정보 대화 상자의 메시지 처리기입니다.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
00401060 > . 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8] 00401064 . 2D 10010000 SUB EAX,110 ; Switch (cases 110..111) 00401069 . 74 27 JE SHORT 00401092 0040106B . 48 DEC EAX 0040106C . 75 10 JNZ SHORT 0040107E 0040106E . 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C] ; Case 111 of switch 00401064 00401072 . 66:3D 0100 CMP AX,1 00401076 . 74 0B JE SHORT 00401083 00401078 . 66:3D 0200 CMP AX,2 0040107C . 74 05 JE SHORT 00401083 0040107E > 33C0 XOR EAX,EAX ; Default case of switch 00401064 00401080 . C2 1000 RETN 10 00401083 > 8B4C24 04 MOV ECX,DWORD PTR SS:[ESP+4] 00401087 . 0FB7C0 MOVZX EAX,AX 0040108A . 50 PUSH EAX ; /Result 0040108B . 51 PUSH ECX ; |hWnd 0040108C . FF15 00514000 CALL DWORD PTR DS:[<&USER32.EndDialog>; \EndDialog 00401092 > B8 01000000 MOV EAX,1 ; Case 110 of switch 00401064 00401097 . C2 1000 RETN 10 3 WndProc ¶//
// 함수: WndProc(HWND, unsigned, WORD, LONG)
//
// 목적: 주 창의 메시지를 처리합니다.
//
// WM_COMMAND - 응용 프로그램 메뉴를 처리합니다.
// WM_PAINT - 주 창을 그립니다.
// WM_DESTROY - 종료 메시지를 게시하고 반환합니다.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 메뉴의 선택 영역을 구문 분석합니다.
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 여기에 그리기 코드를 추가합니다.
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
004010A0 > . 83EC 44 SUB ESP,44
004010A3 . A1 30704000 MOV EAX,DWORD PTR DS:[__security_coo>
004010A8 . 8B4C24 4C MOV ECX,DWORD PTR SS:[ESP+4C]
004010AC . 33C4 XOR EAX,ESP
004010AE . 894424 40 MOV DWORD PTR SS:[ESP+40],EAX
004010B2 . 8BC1 MOV EAX,ECX
004010B4 . 83E8 02 SUB EAX,2 ; Switch (cases 2..111)
004010B7 . 56 PUSH ESI
004010B8 . 8B7424 4C MOV ESI,DWORD PTR SS:[ESP+4C]
004010BC . 0F84 D9000000 JE 0040119B
004010C2 . 83E8 0D SUB EAX,0D
004010C5 . 0F84 A4000000 JE 0040116F
004010CB . 2D 02010000 SUB EAX,102
004010D0 . 74 24 JE SHORT 004010F6
004010D2 . 8B4424 58 MOV EAX,DWORD PTR SS:[ESP+58] ; Default case of switch 004010B4
004010D6 . 8B5424 54 MOV EDX,DWORD PTR SS:[ESP+54]
004010DA . 50 PUSH EAX ; /lParam
004010DB . 52 PUSH EDX ; |wParam
004010DC . 51 PUSH ECX ; |Message
004010DD . 56 PUSH ESI ; |hWnd
004010DE . FF15 E8504000 CALL DWORD PTR DS:[<&USER32.DefWindow>; \DefWindowProcA
004010E4 . 5E POP ESI
004010E5 . 8B4C24 40 MOV ECX,DWORD PTR SS:[ESP+40]
004010E9 . 33CC XOR ECX,ESP
004010EB . E8 4A020000 CALL __security_check_cookie
004010F0 . 83C4 44 ADD ESP,44
004010F3 . C2 1000 RETN 10
004010F6 > 8B4C24 54 MOV ECX,DWORD PTR SS:[ESP+54] ; Case 111 (WM_COMMAND) of switch 004010B4
004010FA . 0FB7C1 MOVZX EAX,CX
004010FD . 83E8 68 SUB EAX,68 ; Switch (cases 68..69)
00401100 . 74 42 JE SHORT 00401144
00401102 . 48 DEC EAX
00401103 . 74 24 JE SHORT 00401129
00401105 . 8B4424 58 MOV EAX,DWORD PTR SS:[ESP+58] ; Default case of switch 004010FD
00401109 . 50 PUSH EAX ; /lParam
0040110A . 51 PUSH ECX ; |wParam
0040110B . 68 11010000 PUSH 111 ; |Message = WM_COMMAND
00401110 . 56 PUSH ESI ; |hWnd
00401111 . FF15 E8504000 CALL DWORD PTR DS:[<&USER32.DefWindow>; \DefWindowProcA
00401117 . 5E POP ESI
00401118 . 8B4C24 40 MOV ECX,DWORD PTR SS:[ESP+40]
0040111C . 33CC XOR ECX,ESP
0040111E . E8 17020000 CALL __security_check_cookie
00401123 . 83C4 44 ADD ESP,44
00401126 . C2 1000 RETN 10
00401129 > 56 PUSH ESI ; /hWnd; Case 69 ('i') of switch 004010FD
0040112A . FF15 EC504000 CALL DWORD PTR DS:[<&USER32.DestroyWi>; \DestroyWindow
00401130 . 33C0 XOR EAX,EAX
00401132 . 5E POP ESI
00401133 . 8B4C24 40 MOV ECX,DWORD PTR SS:[ESP+40]
00401137 . 33CC XOR ECX,ESP
00401139 . E8 FC010000 CALL __security_check_cookie
0040113E . 83C4 44 ADD ESP,44
00401141 . C2 1000 RETN 10
00401144 > 8B0D 6C734000 MOV ECX,DWORD PTR DS:[hInst] ; Case 68 ('h') of switch 004010FD
0040114A . 6A 00 PUSH 0 ; /lParam = NULL
0040114C . 68 60104000 PUSH About ; |DlgProc = win32.About
00401151 . 56 PUSH ESI ; |hOwner
00401152 . 6A 67 PUSH 67 ; |pTemplate = 67
00401154 . 51 PUSH ECX ; |hInst => NULL
00401155 . FF15 F0504000 CALL DWORD PTR DS:[<&USER32.DialogBox>; \DialogBoxParamA
0040115B . 33C0 XOR EAX,EAX
0040115D . 5E POP ESI
0040115E . 8B4C24 40 MOV ECX,DWORD PTR SS:[ESP+40]
00401162 . 33CC XOR ECX,ESP
00401164 . E8 D1010000 CALL __security_check_cookie
00401169 . 83C4 44 ADD ESP,44
0040116C . C2 1000 RETN 10
0040116F > 8D5424 04 LEA EDX,DWORD PTR SS:[ESP+4] ; Case F (WM_PAINT) of switch 004010B4
00401173 . 52 PUSH EDX ; /pPaintstruct
00401174 . 56 PUSH ESI ; |hWnd
00401175 . FF15 F4504000 CALL DWORD PTR DS:[<&USER32.BeginPain>; \BeginPaint
0040117B . 8D4424 04 LEA EAX,DWORD PTR SS:[ESP+4]
0040117F . 50 PUSH EAX ; /pPaintstruct
00401180 . 56 PUSH ESI ; |hWnd
00401181 . FF15 F8504000 CALL DWORD PTR DS:[<&USER32.EndPaint>>; \EndPaint
00401187 . 33C0 XOR EAX,EAX
00401189 . 5E POP ESI
0040118A . 8B4C24 40 MOV ECX,DWORD PTR SS:[ESP+40]
0040118E . 33CC XOR ECX,ESP
00401190 . E8 A5010000 CALL __security_check_cookie
00401195 . 83C4 44 ADD ESP,44
00401198 . C2 1000 RETN 10
0040119B > 6A 00 PUSH 0 ; /ExitCode = 0; Case 2 (WM_DESTROY) of switch 004010B4
0040119D . FF15 FC504000 CALL DWORD PTR DS:[<&USER32.PostQuitM>; \PostQuitMessage
004011A3 . 8B4C24 44 MOV ECX,DWORD PTR SS:[ESP+44]
004011A7 . 5E POP ESI
004011A8 . 33CC XOR ECX,ESP
004011AA . 33C0 XOR EAX,EAX
004011AC . E8 89010000 CALL __security_check_cookie
004011B1 . 83C4 44 ADD ESP,44
004011B4 . C2 1000 RETN 10
4 MyRegisterClass ¶//
// 함수: MyRegisterClass()
//
// 목적: 창 클래스를 등록합니다.
//
// 설명:
//
// Windows 95에서 추가된 'RegisterClassEx' 함수보다 먼저
// 해당 코드가 Win32 시스템과 호환되도록
// 하려는 경우에만 이 함수를 사용합니다. 이 함수를 호출해야
// 해당 응용 프로그램에 연결된
// '올바른 형식의' 작은 아이콘을 가져올 수 있습니다.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_XTESTWIN32);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = (LPCTSTR)IDC_XTESTWIN32;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
return RegisterClassEx(&wcex);
}
004011C0 >/$ 83EC 30 SUB ESP,30 004011C3 |. 8B4424 34 MOV EAX,DWORD PTR SS:[ESP+34] 004011C7 |. 56 PUSH ESI 004011C8 |. 8B35 DC504000 MOV ESI,DWORD PTR DS:[<&USER32.LoadI>; USER32.LoadIconA 004011CE |. 6A 6B PUSH 6B ; /RsrcName = 107. 004011D0 |. 50 PUSH EAX ; |hInst 004011D1 |. C74424 0C 3000>MOV DWORD PTR SS:[ESP+C],30 ; | 004011D9 |. C74424 10 0300>MOV DWORD PTR SS:[ESP+10],3 ; | 004011E1 |. C74424 14 A010>MOV DWORD PTR SS:[ESP+14],WndProc ; | 004011E9 |. C74424 18 0000>MOV DWORD PTR SS:[ESP+18],0 ; | 004011F1 |. C74424 1C 0000>MOV DWORD PTR SS:[ESP+1C],0 ; | 004011F9 |. 894424 20 MOV DWORD PTR SS:[ESP+20],EAX ; | 004011FD |. FFD6 CALL ESI ; \LoadIconA 004011FF |. 68 007F0000 PUSH 7F00 ; /RsrcName = IDC_ARROW 00401204 |. 6A 00 PUSH 0 ; |hInst = NULL 00401206 |. 894424 24 MOV DWORD PTR SS:[ESP+24],EAX ; | 0040120A |. FF15 E0504000 CALL DWORD PTR DS:[<&USER32.LoadCurso>; \LoadCursorA 00401210 |. 894424 20 MOV DWORD PTR SS:[ESP+20],EAX 00401214 |. 8B4424 18 MOV EAX,DWORD PTR SS:[ESP+18] 00401218 |. 6A 6C PUSH 6C ; /RsrcName = 108. 0040121A |. 50 PUSH EAX ; |hInst 0040121B |. C74424 2C 0600>MOV DWORD PTR SS:[ESP+2C],6 ; | 00401223 |. C74424 30 6D00>MOV DWORD PTR SS:[ESP+30],6D ; | 0040122B |. C74424 34 A072>MOV DWORD PTR SS:[ESP+34],OFFSET szW>; | 00401233 |. FFD6 CALL ESI ; \LoadIconA 00401235 |. 8D4C24 04 LEA ECX,DWORD PTR SS:[ESP+4] 00401239 |. 51 PUSH ECX ; /pWndClassEx 0040123A |. 894424 34 MOV DWORD PTR SS:[ESP+34],EAX ; | 0040123E |. FF15 E4504000 CALL DWORD PTR DS:[<&USER32.RegisterC>; \RegisterClassExA 00401244 |. 5E POP ESI 00401245 |. 83C4 30 ADD ESP,30 00401248 \. C3 RETN 5 _tWinMain ¶int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// TODO: 여기에 코드를 입력합니다.
MSG msg;
HACCEL hAccelTable;
// 전역 문자열을 초기화합니다.
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_XTESTWIN32, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// 응용 프로그램 초기화를 수행합니다.
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_XTESTWIN32);
// 기본 메시지 루프입니다.
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
00401250 >/$ 83EC 1C SUB ESP,1C 00401253 |. 56 PUSH ESI 00401254 |. 8B7424 24 MOV ESI,DWORD PTR SS:[ESP+24] 00401258 |. 57 PUSH EDI 00401259 |. 8B3D C4504000 MOV EDI,DWORD PTR DS:[<&USER32.LoadS>; USER32.LoadStringA 0040125F |. 6A 64 PUSH 64 ; /Count = 64 (100.) 00401261 |. 68 08734000 PUSH OFFSET szTitle ; |Buffer = OFFSET win32.szTitle 00401266 |. 6A 67 PUSH 67 ; |RsrcID = STRING "win32" 00401268 |. 56 PUSH ESI ; |hInst 00401269 |. FFD7 CALL EDI ; \LoadStringA 0040126B |. 6A 64 PUSH 64 ; /Count = 64 (100.) 0040126D |. 68 A0724000 PUSH OFFSET szWindowClass ; |Buffer = OFFSET win32.szWindowClass 00401272 |. 6A 6D PUSH 6D ; |RsrcID = STRING "WIN32" 00401274 |. 56 PUSH ESI ; |hInst 00401275 |. FFD7 CALL EDI ; \LoadStringA 00401277 |. 56 PUSH ESI 00401278 |. E8 43FFFFFF CALL MyRegisterClass 0040127D |. 8B4424 38 MOV EAX,DWORD PTR SS:[ESP+38] 00401281 |. 50 PUSH EAX 00401282 |. 56 PUSH ESI 00401283 |. E8 78FDFFFF CALL InitInstance 00401288 |. 83C4 0C ADD ESP,0C 0040128B |. 85C0 TEST EAX,EAX 0040128D |. 75 08 JNZ SHORT 00401297 0040128F |. 5F POP EDI 00401290 |. 5E POP ESI 00401291 |. 83C4 1C ADD ESP,1C 00401294 |. C2 1000 RETN 10 00401297 |> 6A 6D PUSH 6D ; /TableName = 6D 00401299 |. 56 PUSH ESI ; |hInst 0040129A |. FF15 C8504000 CALL DWORD PTR DS:[<&USER32.LoadAccel>; \LoadAcceleratorsA 004012A0 |. 8B3D CC504000 MOV EDI,DWORD PTR DS:[<&USER32.GetMe>; USER32.GetMessageA 004012A6 |. 6A 00 PUSH 0 ; /MsgFilterMax = 0 004012A8 |. 6A 00 PUSH 0 ; |MsgFilterMin = 0 004012AA |. 6A 00 PUSH 0 ; |hWnd = NULL 004012AC |. 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14] ; | 004012B0 |. 51 PUSH ECX ; |pMsg 004012B1 |. 8BF0 MOV ESI,EAX ; | 004012B3 |. FFD7 CALL EDI ; \GetMessageA 004012B5 |. 85C0 TEST EAX,EAX 004012B7 |. 74 44 JE SHORT 004012FD 004012B9 |. 53 PUSH EBX 004012BA |. 8B1D D0504000 MOV EBX,DWORD PTR DS:[<&USER32.Trans>; USER32.TranslateAcceleratorA 004012C0 |. 55 PUSH EBP 004012C1 |. 8B2D D4504000 MOV EBP,DWORD PTR DS:[<&USER32.Trans>; USER32.TranslateMessage 004012C7 |> 8B4424 10 /MOV EAX,DWORD PTR SS:[ESP+10] 004012CB |. 8D5424 10 |LEA EDX,DWORD PTR SS:[ESP+10] 004012CF |. 52 |PUSH EDX 004012D0 |. 56 |PUSH ESI 004012D1 |. 50 |PUSH EAX 004012D2 |. FFD3 |CALL EBX 004012D4 |. 85C0 |TEST EAX,EAX 004012D6 |. 75 12 |JNZ SHORT 004012EA 004012D8 |. 8D4C24 10 |LEA ECX,DWORD PTR SS:[ESP+10] 004012DC |. 51 |PUSH ECX 004012DD |. FFD5 |CALL EBP 004012DF |. 8D5424 10 |LEA EDX,DWORD PTR SS:[ESP+10] 004012E3 |. 52 |PUSH EDX ; /pMsg 004012E4 |. FF15 D8504000 |CALL DWORD PTR DS:[<&USER32.Dispatch>; \DispatchMessageA 004012EA |> 6A 00 |PUSH 0 004012EC |. 6A 00 |PUSH 0 004012EE |. 6A 00 |PUSH 0 004012F0 |. 8D4424 1C |LEA EAX,DWORD PTR SS:[ESP+1C] 004012F4 |. 50 |PUSH EAX 004012F5 |. FFD7 |CALL EDI 004012F7 |. 85C0 |TEST EAX,EAX 004012F9 |.^75 CC \JNZ SHORT 004012C7 004012FB |. 5D POP EBP 004012FC |. 5B POP EBX 004012FD |> 8B4424 10 MOV EAX,DWORD PTR SS:[ESP+10] 00401301 |. 5F POP EDI 00401302 |. 5E POP ESI 00401303 |. 83C4 1C ADD ESP,1C 00401306 \. C2 1000 RETN 10 6 all ¶
|
- 전 이런 놈입니다.
격언> 메아리 없는 짝사랑일지라도 열정을 가지고 자신의 삶을 사랑하라. (장영희)
Recent Changes Echoes Of War(The... @ 2012-05-18 [03:44 pm] by windlesszone Diablo3 @ 2012-05-15 [04:49 pm] by windlesszone Diablo3/story/wizard @ 2012-05-15 [04:48 pm] by windlesszone 4 changes Diablo3/story/wit... @ 2012-05-15 [04:16 pm] by windlesszone Diablo3/story/monk @ 2012-05-15 [04:14 pm] by windlesszone
|
