Почему пишет bad address?

написал клиента, который подключается и отправляет сообщение, но он не отправляет сообщение, а пишет что bad address. как такое может быть? я подключаюсь и сервер пишет что клиент подключен, но отправить не получается.

global main

extern socket
extern connect
extern write
extern perror
extern exit
extern inet_aton

PF_INET        equ        2
SOCK_STREAM    equ        1
SOCKLEN        equ       16

section .start

main:
    push rbp
    mov rbp, rsp
    sub rsp, 128
;[rsp + 0]    sockfd
;[rsp + 4]    struct sockaddr_in of server
    xor rdi, rdi
    xor rsi, rsi
    xor rdx, rdx
    xor rax, rax
    mov edi, PF_INET
    mov esi, SOCK_STREAM
    mov edx, 0
    call socket
    cmp eax, 0
    jg stage_1_0
    lea rdi, [error_msg_socket]
    call perror
    mov rdi, 1
    jmp app_exit
stage_1_0:
    mov [rsp + 0], dword eax
    mov ax, [port_of_server]
    xchg al, ah
    mov [rsp + 4], word PF_INET
    mov [rsp + 6], word ax
    mov [rsp + 8], dword 0
stage_2_0:
    lea rdi, [server_address]
    lea rsi, [rsp + 8]
    call inet_aton
    cmp eax, 0
    jg stage_2_1
    lea rdi, [error_msg_inet_aton]
    call perror
    mov rdi, 1
    jmp app_exit
stage_2_1:
    xor rdi, rdi
    xor rsi, rsi
    xor rdx, rdx
    mov edi, dword [rsp + 0]
    lea rsi, [rsp + 4]
    mov edx, SOCKLEN
    call connect
    cmp eax, 0
    je stage_3_0
    lea rdi, [error_msg_connect]
    call perror
    mov rdi, -1
    jmp app_exit
stage_3_0:
    xor rdi, rdi
    mov edi, dword [rsp + 0]
    call attack
app_exit:
    call exit
    leave
    ret
attack:
    push rbp
    mov rbp, rsp
    sub rsp, 16
    xor rdx, rdx
    mov edx, [len_msg_test]
    lea rsi, [msg_test]
    call write
    cmp eax, 0
    jg end_attack
    lea rdi, [error_msg_write]
    call perror
end_attack:
    leave
    ret

section .rodata

server_address          db '127.0.0.1', 0x0

error_msg_socket        db 'Не удалось открыть сокет', 0x0
error_msg_connect       db 'Не удалось подключиться', 0x0
error_msg_write         db 'Не удалось отправить сообщение', 0x0
error_msg_inet_aton     db 'Не удалось преобразовать адрес', 0x0

port_of_server          dw 8020

msg_test                db 'Проверка', 0xa, 0x0
len_msg_test            db $ - msg_test

компиляция.

all:
    nasm -felf64 main.asm -o main.o
    gcc -no-pie main.o -lc -o test

Ответы (0 шт):