中国开发网: 论坛: 程序员情感CBD: 贴子 261118
ycm0263
建议你好好研究一下黑客帝国系列,看看 NEO 是怎么学习的。
.386
.model flat, stdcall
option casemap :none

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include IpTypes.inc

ICO_MAIN equ 1000
DLG_MAIN equ 1000
IDC_ADPT equ 1001
IDC_TYPE equ 1002
IDC_MAC equ 1003
IDC_IP equ 1004
IDC_GATEWAY equ 1005
IDC_WINS equ 1006
IDC_DHCP equ 1007
IDC_REFRESH equ 1008

.data?
hInstance dd ?
hWinMain dd ?
hDll dd ?
lpGetInfo dd ?
dwStructSize dd ?
lpInfo dd ?
lpMemory dd ?
szBuffer db 1024 dup (?)
szBuffer1 db 1024 dup (?)
.const
szDll db 'Iphlpapi.dll',0
szGetInfo db 'GetAdaptersInfo',0
szErrNoAdapter db '没有安装网络适配器!',0
szNA db 'N/A',0
szMac db '%02X:%02X:%02X:%02X:%02X:%02X',0
szSpar db '/',0
szCrLf db 0dh,0ah,0

.code
_GetIPString proc _lpIP,_lpOut,_dwSize,_dwIfMask

pushad
invoke RtlZeroMemory,_lpOut,_dwSize
mov esi,_lpIP
assume esi:ptr IP_ADDR_STRING
@@:
.if byte ptr [esi].IpAddress
invoke lstrcat,_lpOut,addr [esi].IpAddress
.if (byte ptr [esi].IpMask) && _dwIfMask
invoke lstrcat,_lpOut,addr szSpar
invoke lstrcat,_lpOut,addr [esi].IpMask
.endif
.endif
mov esi,[esi].Next
.if esi
invoke lstrcat,_lpOut,addr szCrLf
jmp @B
.endif
assume esi:nothing
popad
ret

_GetIPString endp

_ShowInfo proc

pushad
mov esi,lpInfo

assume esi:ptr IP_ADAPTER_INFO
.if [esi].Next
invoke GetDlgItem,hWinMain,IDOK
invoke EnableWindow,eax,TRUE
.else
invoke GetDlgItem,hWinMain,IDOK
invoke EnableWindow,eax,FALSE
.endif
invoke SetDlgItemText,hWinMain,IDC_ADPT,addr [esi].Description
invoke SetDlgItemInt,hWinMain,IDC_TYPE,[esi]._Type,FALSE

lea edi,[esi].Address
mov ebx,6
.while ebx
movzx eax,byte ptr [edi+ebx-1]
push eax
dec ebx
.endw
invoke wsprintf,addr szBuffer,addr szMac
add esp,6 * 4
invoke SetDlgItemText,hWinMain,IDC_MAC,addr szBuffer

invoke _GetIPString,addr [esi].IpAddressList,addr szBuffer,sizeof szBuffer,TRUE
invoke SetDlgItemText,hWinMain,IDC_IP,addr szBuffer
invoke _GetIPString,addr [esi].GatewayList,addr szBuffer,sizeof szBuffer,FALSE
.if szBuffer
invoke SetDlgItemText,hWinMain,IDC_GATEWAY,addr szBuffer
.endif
.if [esi].DhcpEnabled
invoke _GetIPString,addr [esi].DhcpServer,addr szBuffer,sizeof szBuffer,FALSE
invoke SetDlgItemText,hWinMain,IDC_DHCP,addr szBuffer
.endif
.if [esi].HaveWins
invoke _GetIPString,addr [esi].PrimaryWinsServer,addr szBuffer,sizeof szBuffer,FALSE
invoke _GetIPString,addr [esi].SecondaryWinsServer,addr szBuffer1,sizeof szBuffer,FALSE
.if szBuffer1
invoke lstrcat,addr szBuffer,addr szCrLf
invoke lstrcat,addr szBuffer,addr szBuffer1
.endif
invoke SetDlgItemText,hWinMain,IDC_WINS,addr szBuffer
.endif
assume esi:nothing
popad
ret

_ShowInfo endp

_GetInfo proc

.if lpMemory
invoke GlobalFree,lpMemory
mov lpMemory,0
.endif
mov ebx,IDC_ADPT
.while ebx <= IDC_DHCP
invoke SetDlgItemText,hWinMain,ebx,addr szNA
inc ebx
.endw
invoke GetDlgItem,hWinMain,IDOK
invoke EnableWindow,eax,FALSE
invoke GlobalAlloc,GPTR,sizeof IP_ADAPTER_INFO
.if eax
mov lpMemory,eax
mov dwStructSize,sizeof IP_ADAPTER_INFO
@@:
push offset dwStructSize
push lpMemory
call lpGetInfo

.if eax == ERROR_BUFFER_OVERFLOW
invoke GlobalReAlloc,lpMemory,dwStructSize,GMEM_MOVEABLE
.if ! eax
jmp @F
.endif
mov lpMemory,eax
jmp @B
.elseif eax == ERROR_SUCCESS
push lpMemory
pop lpInfo
invoke _ShowInfo
.elseif eax == ERROR_NO_DATA
invoke MessageBox,NULL,addr szErrNoAdapter,NULL,MB_OK or MB_ICONWARNING
.endif
.endif
@@:
ret

_GetInfo endp

_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam

mov eax,wMsg
.if eax == WM_COMMAND
mov eax,wParam
.if ax == IDOK
mov eax,lpInfo
mov eax,[eax]
mov lpInfo,eax
invoke _ShowInfo
.elseif ax == IDC_REFRESH
invoke _GetInfo
.endif
.elseif eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
push hWnd
pop hWinMain
invoke LoadIcon,hInstance,ICO_MAIN
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
invoke _GetInfo
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret

_ProcDlgMain endp

start:
invoke LoadLibrary,addr szDll
.if eax
mov hDll,eax
invoke GetProcAddress,eax,offset szGetInfo
.if eax
mov lpGetInfo,eax
.endif
.endif
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
end start
╭∩╮(︶︿︶)╭∩╮ ╭∩╮( ̄ε  ̄")╭∩╮ ╭∩╮ ( ̄0  ̄")╭∩╮

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录