¿Por qué las llamadas al sistema Linux x86-64 modifican RCX, y qué significa el valor?
Estoy tratando de asignar algo de memoria en Linux consys_brk
syscall Esto es lo que probé:
BYTES_TO_ALLOCATE equ 0x08
section .text
global _start
_start:
mov rax, 12
mov rdi, BYTES_TO_ALLOCATE
syscall
mov rax, 60
syscall
La cuestión es que, según la convención de llamadas de Linux, esperaba que el valor de retorno estuviera enrax
registrarse (puntero a la memoria asignada). Ejecuté esto en gdb y después de hacersys_brk
syscall me di cuenta de los siguientes contenidos de registro
Antes de syscall
rax 0xc 12
rbx 0x0 0
rcx 0x0 0
rdx 0x0 0
rsi 0x0 0
rdi 0x8 8
Después de syscall
rax 0x401000 4198400
rbx 0x0 0
rcx 0x40008c 4194444 ; <---- What does this value mean?
rdx 0x0 0
rsi 0x0 0
rdi 0x8 8
No entiendo bien el valor en elrcx
registrarse en este caso ¿Cuál usar como puntero al comienzo de 8 bytes que asigné consys_brk
?