ip.asm

来自「一个汇编写的小程序,可以显示本机的主机名和IP地址」· 汇编 代码 · 共 92 行

ASM
92
字号
.386
.model flat, stdcall
option casemap :none

include /masm32/include/windows.inc
include /masm32/include/user32.inc
include /masm32/include/kernel32.inc
include /masm32/include/wsock32.inc
include /masm32/include/gdi32.inc
includelib /masm32/lib/wsock32.lib
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib
includelib /masm32/lib/gdi32.lib

   WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD

.data 
    dlgname     db "WINSOCK",0 
    szTitle     db "Ip Dialog",0
    wsaError    db "Error initializing winsock!",13,10
    szName      db "Computer Name: %s",0
    szFont      db "MS Sans Serif",0

.data?
    wsa WSADATA <?>
    hStatic     dd ?
    hFont       dd ?
    hInstance   dd ?
    buffer      db 24 dup (?)
    buffer2     db 128 dup (?)
    
.code

start:

        invoke GetModuleHandle, NULL
        mov hInstance, eax
        invoke WSAStartup,101h,addr wsa
            .if eax == NULL
                invoke DialogBoxParam,hInstance,ADDR dlgname,0,ADDR WndProc,0
                invoke ExitProcess,0
            .endif
                invoke MessageBox,NULL,offset wsaError,offset szTitle,MB_OK + MB_ICONSTOP
                    invoke ExitProcess,1
                    
WndProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

      .if uMsg == WM_INITDIALOG
            invoke LoadIcon,hInstance,101
            invoke SendMessage,hWin,WM_SETICON,TRUE,eax
            invoke GetDlgItem,hWin,2000
                mov hStatic,eax
            invoke gethostname,offset buffer,sizeof buffer
            invoke wsprintf,addr buffer2,addr szName,addr buffer
            invoke SetDlgItemText,hWin,3000,addr buffer2
            invoke gethostbyname,addr buffer
            mov eax,[eax+12]                                        
            mov eax,[eax]
            mov eax,[eax]
               invoke inet_ntoa,eax
 	          invoke SetDlgItemText,hWin,2000,eax
            invoke WSACleanup
        xor eax,eax
            ret	
      .elseif uMsg == WM_CTLCOLORSTATIC
        mov eax,lParam
        .if eax == hStatic
            invoke CreateFont,16,16,0,0,400,0,0,0,OEM_CHARSET,\
                            OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,\
                            DEFAULT_QUALITY,DEFAULT_PITCH or FF_SWISS,\
                            ADDR szFont
                mov hFont,eax
            invoke SelectObject, wParam, hFont
            invoke GetSysColor, COLOR_MENU
            invoke SetBkColor, wParam, eax
            invoke SetTextColor,wParam,Blue
            invoke GetStockObject, HOLLOW_BRUSH
                 ret 
        .endif
      .elseif uMsg == WM_CLOSE
            invoke DeleteObject,hFont
            invoke EndDialog,hWin,0  
            xor eax,eax
            ret
      .endif
    xor eax,eax
    ret
    
WndProc endp
end start

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?