Por que as chamadas do sistema x86-64 Linux modificam o RCX e qual é o valor?
Estou tentando alocar alguma memória no linux comsys_brk
syscall. Aqui está o que eu tentei:
BYTES_TO_ALLOCATE equ 0x08
section .text
global _start
_start:
mov rax, 12
mov rdi, BYTES_TO_ALLOCATE
syscall
mov rax, 60
syscall
O problema é que, conforme a convenção de chamada do linux, eu esperava que o valor de retorno estivesse emrax
registrador (ponteiro para a memória alocada). Eu corri isso em gdb e depois de fazersys_brk
syscall notei o seguinte conteúdo do registro
Antes do syscall
rax 0xc 12
rbx 0x0 0
rcx 0x0 0
rdx 0x0 0
rsi 0x0 0
rdi 0x8 8
Após syscall
rax 0x401000 4198400
rbx 0x0 0
rcx 0x40008c 4194444 ; <---- What does this value mean?
rdx 0x0 0
rsi 0x0 0
rdi 0x8 8
Eu não entendo muito bem o valor norcx
registrar neste caso. Qual usar como ponteiro para o início de 8 bytes alocado comsys_brk
?