How do I print out a property from a sockaddr_in struct? For example, I want to print out the port or address of the socket:
;; Data definitions
struc sockaddr_in
.sin_family resw 1
.sin_port resw 1
.sin_addr resd 1
.sin_zero resb 8
endstruc
section .data
;; sockaddr_in structure for the address the listening socket binds to
pop_sa istruc sockaddr_in
at sockaddr_in.sin_family, dw 2 ; AF_INET
at sockaddr_in.sin_port, dw 0xce56 ; port 22222 in host byte order
at sockaddr_in.sin_addr, dd 0 ; localhost - INADDR_ANY
at sockaddr_in.sin_zero, dd 0, 0
iend
sockaddr_in_len equ $ - pop_sa
sin_port_len equ $ - pop_sa + sockaddr_in.sin_port
_start:
;; Print listen init message to stdout
mov rax, 1 ; SYS_WRITE
mov rdi, 1 ; STDOUT
mov rsi, pop_sa + sockaddr_in.sin_port
mov rdx, sin_port_len
syscall
mov rax, 60
syscall
No matter which property I try to print, I get the output: "V�". Why is this happening, and how can I get the expected output (i.e. 22222 for sin_port)?