Ich benutze Recvfrom syscall mit einer Länge von 0x1000. Wenn ich einen Puffer von .bss verwende, gibt es kein Problem; recvfrom wartet auf Kundendaten.Recvfrom: mit Stack als Puffer (len: 4096)
buffer: resb 4096
Aber wenn ich einen Zeiger auf den Stapel als Puffer verwenden, eine qword an der Adresse mov, sie paßt nicht das 4096 Bytes und Recvfrom wartet nicht!
Was ich verstehe, ist der Stapel nicht zu 0 für den 4096 Bytes initialisiert und übernimmt Daten in.
Außerdem Wenn ich meine Länge reduzieren 0x10 dh Recvfrom gesendet, da qword passen, Recvfrom wartet auf die Client-Eingabe.
Muss ich den Stack auf 0 für 4096 Bytes nach unten initialisieren?
Vielen Dank für Ihre Aufmerksamkeit.
Code:
mov rdi, [server_fd]
xor rsi, rsi
xor rdx, rdx
mov rax, SYS_ACCEPT
syscall
mov [clients_fd], rax ;store the clients_fd
mov rdi, rax ; mov client socket fd to rdi
mov rsi, rsp ; use stack as buffer
mov qword [rsi], 0
mov rdx, BUFFER_SIZE; 0x1000
xor rcx, rcx
xor r10, r10 ; flags
xor r9, r9
xor r8, r8
mov rax, SYS_RECVFROM
syscall
mov rdi, [clients_fd]; restore client_fd
mov rsi, rsp; buffer address
xor r10, r10
call _strlen; returns str len in rax
mov rdx, rax ; rax contains the string len
mov rax, SYS_SENDTO
syscall
call sys_close
xor rdi, rdi
call sys_exit
Bitte die entsprechenden Codezeilen hinzufügen. – Michael
Wohin weisen Sie Speicherplatz auf dem Stack zu? – Michael
Der Aufruf von 'strlen' wird den Stack verwenden, was wahrscheinlich Ihre Daten stört. Jedes Interrupt, das während der Verarbeitung auftritt, wird auch etwas Stapelspeicherplatz verwenden. –