오늘 ASM을 재미있게 배우기 시작했고, 내가 알아 내려고하는 것 중 하나는 ASM에서 TCP 연결을 여는 방법입니다. 복잡한 데이터 구조가 없기 때문에push 또는 스택에 syscall 레지스터에 sockaddr을 스택에 저장해야합니까?
나는() 아래로 소켓에 전화를 가지고와 난 그냥 위해 무엇을 해야할지 모르겠어,
그러나 레지스트리의 값을 저장할 수 있습니다 그것은이 시점에서 SOCKADDR
; socket()
mov rax, 41
mov rdi, 20 ; AF_INET
mov rsi, 1 ; SOCK_STREAM
mov rdx, 0 ; Protocol
syscall
; Valid socket?
cmp rax, 0
jle error
; connect()
mov rdi, rax ; rax stores fd, save into rdi before moving rax to syscall id
mov rax, 42
mov rsi,
에 대한 포인터를 필요로하기 때문에 오픈() 시스템 콜, 나는 내가 어떻게해야 해요 무엇인지 amn't. 그냥 값을 스택으로 푸시합니까?
먼저 "레지스트리"가 아닌 * registers *에 값을 저장합니다. 어셈블리에서 소켓을 사용하는 방법은 [이 질문] (http://stackoverflow.com/questions/19850082/using-nasm-and-tcp-sockets)에서 몇 가지 답변을 얻을 수 있습니다. 64 비트가 아닌 32 비트이지만, 사용자가하려는 것처럼 보입니다. –
'c'에 코드를 작성한 다음 asm 출력을 생성하고 그 모양을 볼 수 있습니다. –
컴파일러에 따라 어셈블리에'struct' 정의가 있습니다. 예를 들어'NASM/YASM'은'struct ... endstruct'를 사용하고 MASM은'name struct ... name ends'를 사용합니다. –