我正在尝试使用Linux的sys_brk
系统调用来分配一些内存。这是我尝试过的:
BYTES_TO_ALLOCATE equ 0x08
section .text
global _start
_start:
mov rax, 12
mov rdi, BYTES_TO_ALLOCATE
syscall
mov rax, 60
syscall
根据 Linux 调用规范,我预期返回值将在 rax
寄存器中(指向已分配内存的指针)。我在 gdb 中运行了这个程序,在进行 sys_brk
系统调用后,发现以下寄存器内容。系统调用前:
rax 0xc 12
rbx 0x0 0
rcx 0x0 0
rdx 0x0 0
rsi 0x0 0
rdi 0x8 8
系统调用后
rax 0x401000 4198400
rbx 0x0 0
rcx 0x40008c 4194444 ; <---- What does this value mean?
rdx 0x0 0
rsi 0x0 0
rdi 0x8 8
在这种情况下,我不太理解rcx
寄存器中的价值。哪一个作为指向我用sys_brk
分配的8字节开头的指针使用?
cl
寄存器,我需要先将其清除,对吗?我的意思是例如xor cl, cl
然后mov cl, 7
。 - St.Antario