Решил попробовать на асме винсок2

Тема в разделе "WASM.BEGINNERS", создана пользователем Dude03, 2 авг 2006.

  1. Dude03

    Dude03 New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    48
    вот что вышло :
    Код (Text):
    1. invoke WSAStartup, 202h, ADDR wsa
    2.     .if eax != 0
    3.         mPrintC WSAErr  
    4.         jmp Exit
    5.     .endif
    6.     invoke socket, AF_INET, SOCK_STREAM, 0
    7.     .if eax == INVALID_SOCKET
    8.         mPrintC SockErr
    9.         jmp Exit
    10.     .endif
    11.     mov sock, eax
    12.     mov saddr.sin_family, AF_INET
    13.     invoke inet_addr, INADDR_ANY
    14.     mov saddr.sin_addr, eax
    15.     invoke htons, 3334
    16.     mov saddr.sin_port, ax
    17.     invoke bind, sock, ADDR saddr, sizeaddr
    18.     .if eax == SOCKET_ERROR
    19.         invoke GetLastError
    20.         mPrintC BindErr  
    21.         jmp Exit
    22.     .endif
    проблема в другом - при выполнении функции bind получаеться ошибка 271Eh - неверный указатель. И я никак не могу найти ошибку, помогите пожалуйста
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    > mov saddr.sin_addr, eax
    Судя по описанию структуры, должно быть так:
    mov saddr.sin_addr.S_un.S_addr,eax

    > sizeaddr
    SIZEOF sockaddr_in
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Quantum
    > Судя по описанию структуры, должно быть так:
    Теоретически - да, но на практике IP всего лишь первый дворд структуры и без разницы, как его туда ложить.
     
  4. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Вот например код проверки занят ли порт, все железно работает, сравнивай

    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. includelib \masm32\lib\kernel32.lib
    8. include \masm32\include\user32.inc
    9. includelib \masm32\lib\user32.lib
    10. include \masm32\include\ws2_32.inc
    11. includelib \masm32\lib\ws2_32.lib
    12.  
    13. .data
    14. s_ok byte 'in use',0
    15.  
    16. .data?
    17. sa sockaddr_in <>
    18. sock DWORD ?
    19. WSAData dw 1024 dup (?)
    20. .code
    21. _main:
    22.  
    23. invoke WSAStartup, 202h, addr WSAData
    24. invoke socket, AF_INET, SOCK_STREAM, 0
    25. mov sock, eax
    26. invoke RtlZeroMemory, addr sa, sizeof sockaddr_in
    27. mov sa.sin_family, AF_INET
    28. invoke ntohs, 80
    29. mov sa.sin_port, ax
    30. invoke bind, sock, addr sa, sizeof sockaddr_in
    31. invoke WSAGetLastError
    32. cmp eax, WSAEADDRINUSE
    33. jne ex
    34.  
    35. invoke MessageBox, 0, addr s_ok, 0, 0
    36.  
    37. ex:
    38. ;exits
    39. invoke ExitProcess, 0
    40.  
    41. end _main
     
  5. drmist

    drmist New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    112
    Dude03
    Мне кажется, не помешает предварительно забивать saddr нулями.
     
  6. Dude03

    Dude03 New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    48
    Всем спасибо, надо было забить нулями=)