Почему пишет 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