· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Win32 Assembly

Win32 Assembly ±âº»¿¹Á¦

  • ÀÛ¼ºÀÚ
    Á¶ÀçÇõ(Mminzkn@minzkn.com)

  • °íÄ£°úÁ¤
    2005³â 5¿ù 15ÀÏ : óÀ½¾¸

¼³¸í

±×³É Çѹø ¾î¼Àºí¸®·Î Â¥º»°Ì´Ï´Ù. °ÅÀÇ Template ¼öÁØÀ̹ǷΠ´Ù¸¥ ¿¹Á¦µé°ú ´Ù¸¦¹Ù ¾ø½À´Ï´Ù.

´Ü, masm v8.0 ¿¡¼­ Å×½ºÆ®ÇßÀ¸´Ï ±×¿ÜÀÇ ¹öÁ¯Àº Àå´ã ¸øÇÕ´Ï´Ù.

±×¸®°í C:\masm32 ¿¡ ¼³Ä¡µÇ¾ú´Ù°í °¡Á¤ÇÏ°í ¸¸µç°ÍÀ̱⿡ ´Ù¸¥°÷¿¡ ¼³Ä¡Çϼ̴ٸé include, includelib ±¸¹®À» Àû´çÈ÷ ¼öÁ¤ÇϽñ⠹ٶø´Ï´Ù.

»ç¿ë¹æ¹ý

ÄÄÆÄÀÏÀº ¿ä·¸°Ô ÇϽðí
ml /c /coff mz.asm 
¸µÅ©´Â ¿ä·¸°Ô ÇÕ´Ï´Ù.
link /SUBSYSTEM:WINDOWS mz.obj 


ÄÚµå

COMMENT # 
  Copyright (C) JAEHYUK CHO
  All rights reserved.
  Code by JaeHyuk Cho <mailto:minzkn@minzkn.com>
# 

; Process type -------------------------------- 
.386                ; 386 CPU »ç¿ë ¿¹°í 
.MODEL FLAT,STDCALL ; Ç¥ÁØ ±ÔÄ¢ 
OPTION CASEMAP:NONE ; ¹Ýµå½Ã ÇÊ¿äÇÔ 

; Window project default ---------------------- 
INCLUDE C:\masm32\include\windows.inc 
INCLUDE C:\masm32\include\user32.inc 
INCLUDE C:\masm32\include\kernel32.inc 

;INCLUDE E:\masm32\include\windows.inc 
;INCLUDE E:\masm32\include\user32.inc 
;INCLUDE E:\masm32\include\kernel32.inc 

; Link library -------------------------------- 
INCLUDELIB C:\masm32\lib\user32.lib 
INCLUDELIB C:\masm32\lib\kernel32.lib 
;INCLUDELIB E:\masm32\lib\user32.lib 
;INCLUDELIB E:\masm32\lib\kernel32.lib 


; Proto region -------------------------------- 
WinMain    PROTO :DWORD, :DWORD, :DWORD, :DWORD 
WndProc    PROTO :DWORD, :DWORD, :DWORD, :DWORD 

; Data select --------------------------------- 
.DATA 
g_instance DD 0 
g_command_line DD 0 
g_class_name DB "minzknWin32Engine", 0 
g_title_name DB "´ç½ÅÀº ´©±¸¿ä?", 0 
g_confirm_exit DB "Á¾·áÇÏ·Á°í¿ä?", 0 
g_confirm_exit_title DB "È®ÀÎÁ» ÇÏ°Ú½À´Ï´Ù.", 0 
g_hello DB "¾î¶ó? À©µµ¿ì ³ª¿Ã¶ó±¸ ±×·¡.", 0 

; Code zone ----------------------------------- 
.CODE 
START: ; Win32 startup code 
           INVOKE GetModuleHandle, NULL 
           MOV g_instance, EAX 
           INVOKE GetCommandLine 
           MOV g_command_line, EAX 
           INVOKE WinMain, g_instance, NULL, g_command_line, SW_SHOWDEFAULT 
           INVOKE ExitProcess, eax 
           JMP $ 

WinMain    PROC s_instance:DWORD,      ; ³ª´Â ´©±¸´Ù ! 
                s_prev_instance:DWORD, ; ȣȯ¶§¹®¿¡ 
                s_command_line:DWORD,  ; ÀÌ°ÍÀ» µ¡ºÙ¿©¼­... 
                s_command_show:DWORD   ; ¾î¶»°Ô º¸¿©Áö¶ó±¸? 
           LOCAL s_window_class_ex : WNDCLASSEX ; À©µµ¿ì ÇÐ±Þ È®Àå 
           LOCAL s_message : MSG                ; ¸Þ¼¼ÁöÀü´Þ ¸Å°³Ã¼ 
           LOCAL s_window : DWORD               ; ÁÖ À©µµ¿ì 
          
           mov s_window_class_ex.cbSize, sizeof(WNDCLASSEX) 
           mov s_window_class_ex.style, CS_HREDRAW OR CS_VREDRAW 
           mov s_window_class_ex.lpfnWndProc, offset WndProc 
           mov s_window_class_ex.cbClsExtra, NULL 
           mov s_window_class_ex.cbWndExtra, NULL 
           mov eax, s_instance 
           mov s_window_class_ex.hInstance, eax 
           mov s_window_class_ex.hbrBackground, COLOR_BTNFACE + 1 
           mov s_window_class_ex.lpszMenuName, NULL 
           mov s_window_class_ex.lpszClassName, offset g_class_name 
           mov s_window_class_ex.hIcon, NULL 
           mov s_window_class_ex.hCursor, NULL 
           mov s_window_class_ex.hIconSm, 0 
           INVOKE RegisterClassEx, ADDR s_window_class_ex 

           ; Window µî·Ï 
           INVOKE CreateWindowEx, 
                  0, 
                  ADDR g_class_name, 
                  ADDR g_title_name, 
                  WS_OVERLAPPED OR WS_CAPTION OR WS_SYSMENU OR WS_MAXIMIZEBOX OR WS_MINIMIZEBOX OR WS_BORDER OR WS_THICKFRAME, 
                  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
                  NULL, NULL, s_instance, NULL 
           mov s_window, eax 
          
           ; ºÁ¶ó 
           INVOKE ShowWindow, s_window, SW_SHOWNORMAL 
           ; Çѹø´õ ºÁ¾ßµÇ.. 
           INVOKE UpdateWindow, s_window 

WinLoop: 
           INVOKE GetMessage, ADDR s_message, NULL, 0, 0 ; ¹¹°¡ µµÂøÇßÀ»±î? 
           or eax, eax 
           jz WinExitLoop 
           INVOKE TranslateMessage, ADDR s_message ; Å°º¸µå ´Ï°¡ ó¸®ÇØ 
           INVOKE DispatchMessage, ADDR s_message ; WndProc ¿¡°Ô ³ªÀÇ Á×À½À» ¾Ë·Á¶ó~ 
           jmp WinLoop 
WinExitLoop: 

           ; ³»°¡ ¹«½¼ »óÅÂÀÎÁö »óºÎ¿¡ º¸°íÇÏÀÚ~ 
           mov eax, s_message.wParam 
           ret 
WinMain    ENDP 

; WinProc callback function ------------------- 
WndProc    PROC s_window:DWORD, 
                s_message:DWORD, 
                s_wparam:DWORD, 
                s_lparam:DWORD 
.if s_message == WM_CREATE 
           ; À©µµ¿ì »ý¼ºÇߴµ¥ ¹¹ÇÒ±î? 
           INVOKE MessageBox, s_window, ADDR g_hello, ADDR g_hello, MB_OK OR MB_ICONQUESTION 
           xor eax, eax 
           ret 
.elseif s_message == WM_CLOSE 
           ; À©µµ¿ì Á¾·áÇϱâ Á÷ÀüÀε¥... 
           INVOKE MessageBox, s_window, ADDR g_confirm_exit, ADDR g_confirm_exit_title, MB_YESNO OR MB_ICONQUESTION 
           CMP EAX, IDYES 
           JNE ExitCancel 
           INVOKE DestroyWindow, s_window ; ³ª Á¾·áÇÒ·Á°í Çϴµ¥... 
ExitCancel: 
           xor eax, eax 
           ret 
.elseif s_message == WM_DESTROY 
           INVOKE PostQuitMessage, NULL ; ÁøÂ¥ Á¾·áÇҰžß... 
           xor eax, eax 
           ret 
.endif    
           INVOKE DefWindowProc, s_window, s_message, s_wparam, s_lparam 
           ret 
WndProc    ENDP 

           END START 

; End of source

ID
Password
Join
Sin has many tools, but a lie is the handle which fits them all.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2012-01-26 11:05:12
Processing time 0.0032 sec