mirror of
https://github.com/yasm/yasm
synced 2026-08-26 22:26:05 -04:00
1513 lines
13 KiB
NASM
1513 lines
13 KiB
NASM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
INADDR_ANY equ 0
|
|
INADDR_LOOPBACK equ 7F000001h
|
|
INADDR_BROADCAST equ 0FFFFFFFFh
|
|
INADDR_NONE equ 0FFFFFFFFh
|
|
|
|
SOCK_STREAM equ 1
|
|
SOCK_DGRAM equ 2
|
|
|
|
SOCKEVENT_READ equ 01h
|
|
SOCKEVENT_WRITE equ 02h
|
|
SOCKEVENT_OOB equ 04h
|
|
SOCKEVENT_ACCEPT equ 08h
|
|
SOCKEVENT_CONNECT equ 10h
|
|
SOCKEVENT_CLOSE equ 20h
|
|
|
|
|
|
[absolute 0]
|
|
SOCKADDR:
|
|
.Port resw 1
|
|
.Address resd 1
|
|
SOCKADDR_size:
|
|
[section .text]
|
|
|
|
[absolute 0]
|
|
HOSTENT:
|
|
.Name resd 1
|
|
.Aliases resd 1
|
|
|
|
.AddrList resd 1
|
|
|
|
HOSTENT_size:
|
|
[section .text]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[extern DPMI_Int]
|
|
[extern _AllocTransferBuf]
|
|
[extern _FreeTransferBuf]
|
|
|
|
[extern DPMI_Regs]
|
|
[extern DPMI_EDI]
|
|
[extern DPMI_ESI]
|
|
[extern DPMI_EBP]
|
|
[extern DPMI_EBX]
|
|
[extern DPMI_EDX]
|
|
[extern DPMI_ECX]
|
|
[extern DPMI_EAX]
|
|
[extern DPMI_FLAGS]
|
|
[extern DPMI_ES]
|
|
[extern DPMI_DS]
|
|
[extern DPMI_FS]
|
|
[extern DPMI_GS]
|
|
[extern DPMI_SP]
|
|
[extern DPMI_SS]
|
|
|
|
[extern _Transfer_Buf]
|
|
[extern _Transfer_Buf_Seg]
|
|
[extern _Transfer_Buf_Size]
|
|
|
|
DPMI_EDI_off equ 00h
|
|
DPMI_ESI_off equ 04h
|
|
DPMI_EBP_off equ 08h
|
|
|
|
DPMI_EBX_off equ 10h
|
|
DPMI_EDX_off equ 14h
|
|
DPMI_ECX_off equ 18h
|
|
DPMI_EAX_off equ 1Ch
|
|
DPMI_FLAGS_off equ 20h
|
|
DPMI_ES_off equ 22h
|
|
DPMI_DS_off equ 24h
|
|
DPMI_FS_off equ 26h
|
|
DPMI_GS_off equ 28h
|
|
DPMI_IP_off equ 2Ah
|
|
DPMI_CS_off equ 2Ch
|
|
DPMI_SP_off equ 2Eh
|
|
DPMI_SS_off equ 30h
|
|
|
|
|
|
|
|
|
|
|
|
[extern _AllocMem]
|
|
[extern _AllocSelector]
|
|
[extern _FreeSelector]
|
|
[extern _GetPhysicalMapping]
|
|
[extern _FreePhysicalMapping]
|
|
[extern _LockArea]
|
|
|
|
_AllocMem_arglen equ 4
|
|
_AllocSelector_arglen equ 4
|
|
_FreeSelector_arglen equ 2
|
|
_GetPhysicalMapping_arglen equ 16
|
|
_FreePhysicalMapping_arglen equ 8
|
|
_LockArea_arglen equ 10
|
|
|
|
|
|
|
|
|
|
|
|
[extern _Install_Int]
|
|
[extern _Remove_Int]
|
|
[extern _Exit_IRQ]
|
|
[extern _Init_IRQ]
|
|
[extern _Restore_IRQ]
|
|
[extern _Enable_IRQ]
|
|
[extern _Disable_IRQ]
|
|
|
|
_Install_Int_arglen equ 8
|
|
_Remove_Int_arglen equ 4
|
|
_Restore_IRQ_arglen equ 4
|
|
_Enable_IRQ_arglen equ 4
|
|
_Disable_IRQ_arglen equ 4
|
|
|
|
[bits 32]
|
|
|
|
|
|
|
|
|
|
SOCKET_INIT equ 5001h
|
|
SOCKET_EXIT equ 5002h
|
|
SOCKET_ACCEPT equ 5003h
|
|
SOCKET_BIND equ 5004h
|
|
SOCKET_CLOSE equ 5005h
|
|
SOCKET_CONNECT equ 5006h
|
|
SOCKET_GETPEERNAME equ 5007h
|
|
SOCKET_GETSOCKNAME equ 5008h
|
|
SOCKET_INETADDR equ 5009h
|
|
SOCKET_INETNTOA equ 500Ah
|
|
SOCKET_LISTEN equ 500Bh
|
|
SOCKET_RECV equ 500Ch
|
|
SOCKET_RECVFROM equ 500Dh
|
|
SOCKET_SEND equ 500Eh
|
|
SOCKET_SENDTO equ 500Fh
|
|
SOCKET_SHUTDOWN equ 5010h
|
|
SOCKET_CREATE equ 5011h
|
|
SOCKET_GETHOSTBYADDR equ 5012h
|
|
SOCKET_GETHOSTBYNAME equ 5013h
|
|
SOCKET_GETHOSTNAME equ 5014h
|
|
SOCKET_INSTALLCALLBACK equ 5015h
|
|
SOCKET_REMOVECALLBACK equ 5016h
|
|
SOCKET_ADDCALLBACK equ 5017h
|
|
SOCKET_GETCALLBACKINFO equ 5018h
|
|
|
|
|
|
STRING_MAX equ 256
|
|
HOSTENT_ALIASES_MAX equ 16
|
|
HOSTENT_ADDRLIST_MAX equ 16
|
|
|
|
[section .bss]
|
|
|
|
Callback_Address resd 1
|
|
Callback_Int resb 1
|
|
Multiplex_Handle resw 1
|
|
VDD_Handle resw 1
|
|
LastError resd 1
|
|
NetAddr_static resb STRING_MAX
|
|
HostEnt_Name_static resb STRING_MAX
|
|
HostEnt_Aliases_static resd HOSTENT_ALIASES_MAX
|
|
HostEnt_AddrList_static resd HOSTENT_ADDRLIST_MAX
|
|
HostEnt_Aliases_data resb STRING_MAX*HOSTENT_ALIASES_MAX
|
|
HostEnt_AddrList_data resd HOSTENT_ADDRLIST_MAX
|
|
|
|
[section .data]
|
|
|
|
rcsid db '$Id: socket.asm,v 1.1 2001/11/21 08:41:53 peter Exp $',0
|
|
|
|
ALTMPX_Signature db 'ECE291 ', 'EX291 ', 0
|
|
ALTMPX_MinVersion equ 0100h
|
|
SOCKET_Version equ 0100h
|
|
HostEnt_static :
|
|
..@44.strucstart:
|
|
times HOSTENT.Name-($-..@44.strucstart) db 0
|
|
dd HostEnt_Name_static
|
|
times HOSTENT.Aliases-($-..@44.strucstart) db 0
|
|
dd HostEnt_Aliases_static
|
|
times HOSTENT.AddrList-($-..@44.strucstart) db 0
|
|
dd HostEnt_AddrList_static
|
|
times HOSTENT_size-($-..@44.strucstart) db 0
|
|
|
|
|
|
VDD_InitData
|
|
dw SOCKET_Version
|
|
dd STRING_MAX
|
|
dd HOSTENT_ALIASES_MAX
|
|
dd HOSTENT_ADDRLIST_MAX
|
|
dd LastError
|
|
dd NetAddr_static
|
|
dd HostEnt_Name_static
|
|
dd HostEnt_Aliases_static
|
|
dd HostEnt_AddrList_static
|
|
dd HostEnt_Aliases_data
|
|
dd HostEnt_AddrList_data
|
|
|
|
[section .text]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _InitSocket]
|
|
_InitSocket
|
|
push esi
|
|
push edi
|
|
push es
|
|
|
|
|
|
|
|
cld
|
|
|
|
|
|
xor eax, eax
|
|
mov cx, 1
|
|
int 31h
|
|
jc near .error
|
|
mov bx, ax
|
|
|
|
|
|
mov ax, 0008h
|
|
xor ecx, ecx
|
|
mov dx, 0FFFFh
|
|
int 31h
|
|
jc near .errorfree
|
|
|
|
xor eax, eax
|
|
|
|
.loop:
|
|
mov esi, eax
|
|
mov [DPMI_EAX], eax
|
|
push bx
|
|
mov bx, 2Dh
|
|
call DPMI_Int
|
|
pop bx
|
|
cmp byte [DPMI_EAX], 0FFh
|
|
jne .next
|
|
|
|
|
|
cmp word [DPMI_ECX], ALTMPX_MinVersion
|
|
jb .next
|
|
|
|
|
|
mov ax, 0007h
|
|
movzx edx, word [DPMI_EDX]
|
|
shl edx, 4
|
|
mov ecx, edx
|
|
shr ecx, 16
|
|
int 31h
|
|
jc .errorfree
|
|
|
|
mov es, ebx
|
|
movzx edi, word [DPMI_EDI]
|
|
mov ecx, 16/2
|
|
mov esi, ALTMPX_Signature
|
|
rep cmpsw
|
|
jz .foundmpx
|
|
|
|
.next:
|
|
inc ah
|
|
jnz .loop
|
|
|
|
jmp short .errorfree
|
|
|
|
.foundmpx:
|
|
|
|
mov ax, 0001h
|
|
int 31h
|
|
|
|
|
|
mov eax, [DPMI_EAX]
|
|
mov [Multiplex_Handle], ax
|
|
mov al, 10h
|
|
mov [DPMI_EAX], ax
|
|
push bx
|
|
mov bx, 2Dh
|
|
call DPMI_Int
|
|
pop bx
|
|
cmp byte [DPMI_EAX], 1
|
|
jne .error
|
|
mov dx, [DPMI_EDX]
|
|
mov [VDD_Handle], dx
|
|
|
|
|
|
mov ecx, VDD_InitData
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_INIT<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
jc .error
|
|
|
|
xor eax, eax
|
|
jmp short .exit
|
|
|
|
.errorfree:
|
|
mov ax, 0001h
|
|
int 31h
|
|
|
|
.error:
|
|
xor eax, eax
|
|
inc eax
|
|
|
|
.exit:
|
|
pop es
|
|
pop edi
|
|
pop esi
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _ExitSocket]
|
|
_ExitSocket
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_EXIT<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_SetCallback]
|
|
_Socket_SetCallback: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.HandlerAddress equ 8
|
|
|
|
|
|
|
|
|
|
|
|
mov ax, [Multiplex_Handle]
|
|
mov al, 11h
|
|
mov [DPMI_EAX], ax
|
|
mov bx, 2Dh
|
|
call DPMI_Int
|
|
cmp byte [DPMI_EAX], 1
|
|
jne near .error
|
|
|
|
movzx edx, byte [DPMI_EDX]
|
|
mov [Callback_Int], dl
|
|
|
|
mov ecx, [Callback_Address]
|
|
mov eax, [ebp+.HandlerAddress]
|
|
mov [Callback_Address], eax
|
|
test eax, eax
|
|
jz near .deinstall
|
|
|
|
test ecx, ecx
|
|
jnz near .ok
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword 4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword Callback_Address
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
o16 push ds
|
|
|
|
call _LockArea
|
|
add esp, byte _LockArea_arglen
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword Callback_Int
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
o16 push ds
|
|
|
|
call _LockArea
|
|
add esp, byte _LockArea_arglen
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword Socket_InterruptHandler_end-Socket_InterruptHandler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword Socket_InterruptHandler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
o16 push cs
|
|
|
|
call _LockArea
|
|
add esp, byte _LockArea_arglen
|
|
movzx edx, byte [DPMI_EDX]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push dword Socket_InterruptHandler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push edx
|
|
|
|
call _Install_Int
|
|
add esp, byte _Install_Int_arglen
|
|
test eax, eax
|
|
jnz .error
|
|
|
|
movzx edx, byte [Callback_Int]
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_INSTALLCALLBACK<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
test eax, eax
|
|
jz .end
|
|
|
|
mov dword [Callback_Address], 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push edx
|
|
|
|
call _Remove_Int
|
|
add esp, byte _Remove_Int_arglen
|
|
jmp short .error
|
|
|
|
.deinstall:
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_REMOVECALLBACK<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push edx
|
|
|
|
call _Remove_Int
|
|
add esp, byte _Remove_Int_arglen
|
|
xor eax, eax
|
|
jmp short .end
|
|
|
|
.ok:
|
|
xor eax, eax
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
.error:
|
|
xor eax, eax
|
|
inc eax
|
|
.end:
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_AddCallback]
|
|
_Socket_AddCallback: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
.EventMask equ 12
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_ADDCALLBACK<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Socket_InterruptHandler
|
|
|
|
mov eax, [Callback_Address]
|
|
test eax, eax
|
|
jz .chain
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_GETCALLBACKINFO<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
test eax, eax
|
|
jnz .chain
|
|
|
|
push edx
|
|
push ecx
|
|
call dword [Callback_Address]
|
|
add esp, byte 8
|
|
|
|
.done:
|
|
|
|
mov al, 20h
|
|
cmp byte [Callback_Int], 50h
|
|
jb .lowirq
|
|
out 0A0h, al
|
|
.lowirq:
|
|
out 20h, al
|
|
|
|
xor eax, eax
|
|
ret
|
|
|
|
.chain:
|
|
mov eax, 1
|
|
ret
|
|
Socket_InterruptHandler_end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_accept]
|
|
_Socket_accept: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
.Name equ 12
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_ACCEPT<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_bind]
|
|
_Socket_bind: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
.Name equ 12
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_BIND<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_close]
|
|
_Socket_close: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_CLOSE<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_connect]
|
|
_Socket_connect: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
.Name equ 12
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_CONNECT<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_getpeername]
|
|
_Socket_getpeername: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
.Name equ 12
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_GETPEERNAME<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_getsockname]
|
|
_Socket_getsockname: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
.Name equ 12
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_GETSOCKNAME<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_ntohl]
|
|
_Socket_ntohl
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_htonl]
|
|
_Socket_htonl: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.HostVal equ 8
|
|
|
|
|
|
|
|
mov eax, [ebp+.HostVal]
|
|
bswap eax
|
|
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_ntohs]
|
|
_Socket_ntohs
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_htons]
|
|
_Socket_htons: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.HostVal equ 8
|
|
|
|
|
|
|
|
mov ax, [ebp+.HostVal]
|
|
xchg al, ah
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_inet_addr]
|
|
_Socket_inet_addr: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.DottedAddress equ 8
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_INETADDR<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_inet_ntoa]
|
|
_Socket_inet_ntoa: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Address equ 8
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_INETNTOA<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov eax, NetAddr_static
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_listen]
|
|
_Socket_listen: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
.BackLog equ 12
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_LISTEN<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_recv]
|
|
_Socket_recv: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
.Buf equ 12
|
|
|
|
|
|
.MaxLen equ 16
|
|
|
|
|
|
.Flags equ 20
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_RECV<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_recvfrom]
|
|
_Socket_recvfrom: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
.Buf equ 12
|
|
|
|
|
|
.MaxLen equ 16
|
|
|
|
|
|
.Flags equ 20
|
|
|
|
|
|
.From equ 24
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_RECVFROM<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_send]
|
|
_Socket_send: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
.Buf equ 12
|
|
|
|
|
|
.Len equ 16
|
|
|
|
|
|
.Flags equ 20
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_SEND<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_sendto]
|
|
_Socket_sendto: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
.Buf equ 12
|
|
|
|
|
|
.Len equ 16
|
|
|
|
|
|
.Flags equ 20
|
|
|
|
|
|
.To equ 24
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_SENDTO<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_shutdown]
|
|
_Socket_shutdown: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Socket equ 8
|
|
|
|
|
|
.Flags equ 12
|
|
|
|
|
|
|
|
mov eax, [ebp+.Flags]
|
|
test eax, eax
|
|
jz .done
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_SHUTDOWN<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
.done:
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_create]
|
|
_Socket_create: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Type equ 8
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_CREATE<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_gethostbyaddr]
|
|
_Socket_gethostbyaddr: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Address equ 8
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_GETHOSTBYADDR<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
test eax, eax
|
|
jz .done
|
|
mov eax, HostEnt_static
|
|
.done:
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_gethostbyname]
|
|
_Socket_gethostbyname: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Name equ 8
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_GETHOSTBYNAME<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
test eax, eax
|
|
jz .done
|
|
mov eax, HostEnt_static
|
|
.done:
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_gethostname]
|
|
_Socket_gethostname: push ebp
|
|
mov ebp, esp
|
|
|
|
|
|
.Name equ 8
|
|
|
|
|
|
.NameLen equ 12
|
|
|
|
|
|
|
|
clc
|
|
movzx eax, word [VDD_Handle]
|
|
or eax, SOCKET_GETHOSTNAME<<16
|
|
db 0C4h, 0C4h, 058h, 002h
|
|
mov esp, ebp
|
|
pop ebp
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[global _Socket_GetLastError]
|
|
_Socket_GetLastError
|
|
|
|
mov eax, [LastError]
|
|
ret
|
|
|