Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在NASM linux x64中调用套接字绑定后会得到EACCES_Linux_Sockets_Bind_Nasm_System Calls - Fatal编程技术网

为什么在NASM linux x64中调用套接字绑定后会得到EACCES

为什么在NASM linux x64中调用套接字绑定后会得到EACCES,linux,sockets,bind,nasm,system-calls,Linux,Sockets,Bind,Nasm,System Calls,我的代码如下。我可以在sys\u套接字中获得fd=3,但由于errno=EACCES,无法通过sys\u绑定。我不知道为什么,因为我已经在我的办公室检查了寄存器和内存数据。你能给我一些建议吗?非常感谢 global _start struc sockaddr_in .sin_family resw 1 .sin_port resw 1 .sin_addr resd 1 .sin_zero resb 8 endstruc ; Convert n

我的代码如下。我可以在sys\u套接字中获得fd=3,但由于errno=EACCES,无法通过sys\u绑定。我不知道为什么,因为我已经在我的办公室检查了寄存器和内存数据。你能给我一些建议吗?非常感谢

        global  _start

struc sockaddr_in
    .sin_family resw 1
    .sin_port resw 1
    .sin_addr resd 1
    .sin_zero resb 8
endstruc

; Convert numbers (constants!) to network byte order
%define htonl(x) ((x & 0xFF000000) >> 24) | ((x & 0x00FF0000) >> 8) | ((x & 0x0000FF00) << 8) | ((x & 0x000000FF) << 24)
%define htons(x) ((x >> 8) & 0xFF) | ((x & 0xFF) << 8)

AF_INET     equ 2
SOCK_STREAM equ 1
INADDR_ANY  equ 0   ; /usr/include/linux/in.h

IP          equ htonl(INADDR_ANY)
PORT        equ htons(80)

STDIN       equ 0
STDOUT      equ 1

        section .data

        my_sa: istruc sockaddr_in
            at sockaddr_in.sin_family, dw AF_INET
            at sockaddr_in.sin_port, dw PORT
            at sockaddr_in.sin_addr, dd INADDR_ANY
            at sockaddr_in.sin_zero, dd 0, 0   ;  for struct sockaddr
        iend

        section .text
_start:
        mov     rax, 41                 ; system call sys_socket
        mov     rdi, AF_INET            ; AF_INET
        mov     rsi, SOCK_STREAM        ; SOCK_STREAM
        xor     rdx, rdx                ; INADDR_ANY=0
        syscall                         ; rax contains sockfd

        mov     rdi, rax                ; sockfd
        mov     rax, 49                 ; system call sys_bind
        mov     rsi, my_sa              ; address of struct sockaddr my_sa
        mov     rdx, sockaddr_in_size   ; sizeof(my_sa)
        syscall                         ; on success, rax is 0
global\u启动
struc sockaddr_in
.sin_家庭报告1
.sin_port resw 1
.sinu addr resd 1
.sinu zero resb 8
端部结构
; 将数字(常数!)转换为网络字节顺序

%定义htonl(x)((x&0xFF000000)>>24)|((x&0x00FF0000)>>8)|((x&0x0000FF00)8)&0xFF)|((x&0xFF)你是以root身份运行程序吗?只有root可以绑定1024以下的端口。哦,我明白了。谢谢!解决了!你是以root身份运行程序吗?只有root可以绑定1024以下的端口。哦,我明白了。谢谢!解决了!