
Ŀ
                                                                    
                        
                                    
                           
                                          
Ĵ
                                  5                           
ٰ



               Micro$oft Windows Sockets
                       by Bumblebee/29a

*************************** ॢ by DrMad **************************

   

    1. 
    2.  ⠪ ᮪ Windows?
    3. ७  Micro$oft
    4. --蠣: 砥
    5. ⥭  
    ਫ: wsocks.inc

   1. 

     ᮡ    ਥ஢   .     ਠ
᮪⮢ ફ,  ॠ   Win32.        믮
㤠 ᮥ 襣  , ਬ, ᫠ 뫮.  
ᠭ 讣 窠 ⥢  I-Worm.Anaphylaxis.

    2.  ⠪ ᮪ Windows?

    䨪 ᮪⮢  Windows 뢠 䥩 Microsoft Windows
 ,   ᭮    楯樨  "᮪⮢",  ⠢襩  ⭮
 Berkeley   Software  Distribution  (BSD).    ᮤঠ  
楤, ந   ᮪    ફ,    ⠪        
Windows-ᯥ᪨ ७,  騥 ணࠬ ᯮ짮
"२⢠" ਥ஢  ᮮ饭 ⥪ Windows.
        䨣 - ᮪?   BSD -  䠩, ᯮ
 㤠 設.   ᯮ짮  BSD   䠩. 
  ᯮ짮    䠩  'write'   'read'   
⥭ १ ᮪.   MS   ஢ ࠪ樨   
ᯥ樠  㭪樨,  ⮡      뢠    ᯮ짮 
 API.

    3. ७ Microsoft

     㭪樨.    M$,    뫮  ફ:

    WSAAsyncGetHostByAddr()
    WSAAsyncGetHostByName()
    WSAAsyncGetProtoByName()
    WSAAsyncGetProtoByNumber()
    WSAAsyncGetServByName()
    WSAAsyncGetServByPort()
    WSAAsyncSelect()
    WSACancelAsyncRequest()
    WSACancelBlockingCall()
   *WSACleanup()
    WSAGetLastError()
    WSAIsBlocking()
    WSASetBlockingHook()
    WSASetLastError()
   *WSAStartup()
    WSAUnhookBlockingHook()

    M$ ᭠    ⨬    쬮,    ⮡    ࠡ      ᫮
筮.  ந,  ᫨  App    ⠭  裡?
⠭  ॡ,  ⮡ App ﭭ ஢﫠 ⮢.
 ࠧ,  App   ਭ  ᮮ饭,  뫠  .
 㭪樨  ᭠ 㥬 ࠡ⮩.   ᮡ 
㭪樨  '*'.  㣨  㦭,  ⮬   ᮡ  ᯮ짮
㭪樨  ⨫ BSD (BSD=UNIX=LINUX=relez!).

    4. --蠣: 砥

     蠣 -  ਭ樠஢  wsocks    .    ᮡ६
ᯮ짮 wsock  1.1,  ⠪    ஢ન ਤ   
WSAStartup.

        push    offset wsadata ;  WSADATA
        push    VERSION1_1     ;  㦭  1.1
        call    WSAStartup     ; ஢ ⠭ wsocks
        cmp     eax,0          ; on error
        jne     qApp           ; exit app

        mov     ax,VERSION1_1  ; WSAStartup 頥 
        cmp     ax,word ptr [wsadata.mVersion] ; ஢ 
        jne     exitAppQsocks                  ;  ᮪  

    WSAStartup ॡ  㬥⮢: 㪠⥫   WSDATA 
ॡ㥬  .    API-誠  頥   .mVwrsion 㯭
 ᨨ,       ࠢ    .  ஬  ⮣,
WSAStartup ।०   Windows,      ᮡࠥ  ᯮ짮
wsocks.   ᫨        ࠨ,      ࠢ   
ᯮ짮 WSACleanup.

        call    WSACleanup     ;  ࠡ  ᮪⠬

    ⨬,   室 .   㦭  ᮪.

        push    PCL_NONE       ; ⮪
        push    SOCK_STREAM    ; ⨯ ᮪
        push    AF_INET        ; ᥬ⢮
        call    socket         ;  ᮪
        cmp     eax,SOCKET_ERR ; on error
        je      doCleanUp      ; WSACleanup

    㭪 socket ॡ 3 㬥⮢:  ⮪,  ⨯  ᥬ⢠.
⮪      ⠭,      ⮬    㧭  ⥬
᭮ Windows. ਬ:  㦭 ᪮  telnet-. ᫨
  ⠭  ⮪  telnet-᪮ ﭨ  Windows  ࠧ
  ⮪,    ࠡ    ᮪⠬   .   ⮬   
⠭ । ⮪.
     ᮪  :  STREAM  DATAGRAM.  ਥ஢ 
⠭ 裡   뫪 ⮢,   室
 ⥫  ந쭮 浪.   ⮣, 뫠 ஭ 
ᬮ 㧭, 襫  ,    ஭ ⥫.
    ᫥ - ᥬ⢮,  ஥  :  AI_UNIX, AF_INET... 
⮫쪮  AF_INET ন  ⮩ ᨨ,   ᯮ.
     ᯮ㥬 PCL_NONE,  SOCK_STREAM    AF_INET.  㭪樨  ᮪⮢
 SOCKET_ERR (-1),  ᫨ 맮    ᮪,  ᫨
 窮.
    ᫥ 蠣  -  ⠭ .  ᪨,   뢠 
᮪⮬,   ᯮ    ࠢ        㤠
設. ࢮ,     ,     SOCKADDR (
஢ :   ᪫ ࠧ  ,  .,
 ᮡࠥ ᯮ짮 ⮫쪮 AF_INET).

SOCKADDR        struct
sin_family dw 0        ; ever AF_INET
sin_port   dw 0        ; the port
sin_addr   dd 0        ; addr of server node
sin_zero   db 8 dup(0) ; not used
SOCKADDR        ends

     sin_family  ,   sin_port  sin_addr -  ࠧ
᫮.      sin_port   -    ,    ஬    ᮡࠥ
ਪ.     ᫮      ⭮  㯮冷祭  
ᮮ⢥⢨    ⥢묨  ᮣ襭ﬨ.   ⮣ ᮪ ন
htons:

        push    PORT  ;  
        call    htons ;     ⥢
        mov     word ptr [sockaddr.sin_port],ax ; 浪 ⮢

  Htons gets the port and returns a WORD with network byte order.

    㭪 htons        頥  ᫮    㯮冷祭묨
 ⥢ ⠭ ⠬.
     sin_addr  ᫮.    裡 㦭 addr   host.  
᫮,  ஥    㧥.  筮      筮  த
'domain.ext'  (ਬ,  IBM.com,  netscape.com,...).       
   IP-   (xxx.xxx.xxx.xxx),    ࠧ    㯯
窠.

        push    offset server ;  ப ('oeee.net')
        call    gethostbyname ; ६  hostent
        cmp     eax,0         ; on error:
        je      exitQsocksC   ; 뢠 ᮪  ⢠
        ; eax ᮤন 㪠⥫  HOSTENT

        mov     eax,dword ptr [eax+HOSTENT_IP] ; ६    IP
        mov     eax,dword ptr [eax]            ; ६ ᮡ⢥ IP
        mov     dword ptr [sockaddr.sin_addr],eax ;   !

        push    sizeOfSockaddr  ; ࠧ  sockaddr
        push    offset sockaddr ;  sockaddr
        push    dword ptr [fd]  ;  ᮪ socket
        call    connect         ; ⠭ !
        cmp     ax,SOCKET_ERR   ; on error:
        je      exitQsocksC     ;  ᮪  ⢠

     ਬ  祭  ⥭:   ௬ HOSTENT,   ᮤন 
 HOSTENT_IP  IP    㧫.  ⥬    塞  sin_addr  
sockaddr,   ᫥ ⮣  ⮢  裡. ⠭ 裡 ॡ:
ࠧ   SOCKADDR  (      ⠭),  㪠⥫  
 SOCKADDR   ᮪.
      ,  ⠫  ᮪   closesocket.

        push    dword ptr [fd] ;  ᮪
        call    closesocket

    5. ⥭  

    Micro$ ᭠ ࠧ묨 API  ⥭  ,    㤥
ᯮ짮: send  recv.

        push    0      ;  ⠪   (  ⠪ OOBD)
        push    ecx    ; ࠧ 뫠 ᮮ饭
        push    esi    ;  ᮮ饭
        push    eax    ;  ᮪
        call    send

        push    0      ;  ⠪  
        push    4      ; ࠧ ਭ ᮮ饭
        push    offset response ;  ਭ ᮮ饭
        push    eax    ;  ᮪
        call    recv

    㭪 send ࠡ⠥  頥   訡,   _lwrite  
 ᠬ ந室  recv  _lread.
    㭪樨 sens   recv  -  ᨭ஭.    砥,    ᫨  
뫠    ਭ      ਥ/।,  
᮪  ਫ   ,      㯭,
   ࢥ,    .
     ᮧ ⮪  ⮪ ⠭     ਭ/뫠
ᮮ饭  (믮  묨).   ,   ᮧ
 ⮪,       ⨬.    ᫨  ⮪  室  
ﭨ  ,  ६  ⥪.     ⮪ 蠥
⮪  த ࠡ.

    , 栭!

 : wsocks.inc

;
;      WSocks.inc: 砥 䠩  windows sockets.
;      ࠡ⮠  TASM5  Win32.
;
;      (C) 1999 Bumblebee.
;
;     䠩 ᮤন ᭮   㭪樨  ࠡ 
;    windows sockets.

;    ᠭ API:
;    㬥 -  浪 PUSH-

;    쪮  ⫠
extrn   WSAGetLastError:PROC

; 稭 ᯮ짮 winsock.dll
; addr ⨯ WSADATA, 訢  version
; 頥: 0, ᫨  ଠ쭮
extrn WSAStartup:PROC

; 蠥 ᯮ짮 winsock.dll
; 頥: SOCK_ERR  訡
extrn WSACleanup:PROC

; 뢠  ᮪
; ⮪ (PCL_NONE), ⨯ (SOCK_??), ଠ  (AF_??)
; 頥: 䨪 ᮪  SOCKET_ERR ( 16 )
extrn socket:PROC

; 뢠 ᮪
; ਯ ᮪
;
extrn   closesocket:PROC

; 뫠  (  쬮... Unix ᯮ  write)
; 䫠 ( 1 OOB data  0 - ଠ), ,  , ᮪
; 頥: ᫠ ᨬ  SOCKET_ERR  訡
extrn   send:PROC

; ਭ  (  쬮... Unix ᯮ  read)
; 䫠 (  0), ,  , ᮪
; 頥: ਭ ᨬ  SOCKET_ERR  訡
extrn   recv:PROC

;   ࢥ஬
; ࠧ  SOCKADDR,  SOCKADDR, ᮪
; 頥: SOCKET_ERR  訡
extrn connect:PROC

; ਭ  ⥪饣 
;    ,    
; 頥: SOCKET_ERR  訡
extrn   gethostname:PROC

; ਭ  hostent
;  
; 頥: 㪠⥫    0  訡
extrn   gethostbyname:PROC

;  ப  "xxx.xxx.xxx.xxx"   冷 ⮢
; 㪠⥫  ப
; 頥: in_addr (32 )
extrn inet_addr:PROC

;   ᫮   冷 ⮢ (筮  port)
; 頥: ᫮  ⥢ 浪 ⮢
extrn   htons:PROC

;  :o

;  sockaddr  裡
; ஢ (  㤮 ᯮ짮)
; ᫨  ਣ, ᬮ  winsock.h

SOCKADDR        struct
sin_family  dw 0 ; ex. AF_INET
sin_port    dw 0 ; ᯮ  ⮣ htons
sin_addr    dd 0 ;   ࢥ ( 㪠 ᮬ)
sin_zero    db 8 dup(0)
SOCKADDR        ends

;  ⨪ WSAStartup
WSADATA struct
mVersion       dw 0
mHighVersion   dw 0
szDescription  db 257 dup(0)
szSystemStatus db 129 dup(0)
iMaxSockets    dw 0
iMaxUpdDg      dw 0
lpVendorInfo   dd 0
WSADATA ends

;  㦭 ⠭

;   winsocks  㦭? (usually 1.1)
VERSION1_0      equ     0100h
VERSION1_1      equ     0101h
VERSION2_0      equ     0200h

AF_UNIX equ 1     ;  
AF_INET equ 2     ; ୥ (ᯮ  ᥣ)
AF_IMPLINK equ 3  ; ௠
AF_NETBIOS equ 17 ;   ⨫ NetBios

; ⨯ ᮪⮢
SOCK_STREAM equ 1 ; ⮪ (ਥ஢  ;  ⨫ telnet)
SOCK_DGRAM  equ 2 ; ⠣ࠬ (, , )

; protocol
PCL_NONE        equ     0       ; none (। ⮪)

SOCKET_ERR      equ     -1      ; ⠭⭠ 訡 winsock

HOSTENT_IP      equ     10h     ;    hostent  IP

 ਫ

