我试图用sys_brk
分配内存,这是程序:
BYTES_TO_ALLOCATE equ 0x08
section .text
global _start
_start:
mov rax, 12 ;sys_brk number
mov rdi, BYTES_TO_ALLOCATE
syscall
mov cl, 0x00 ;setting the value I need
mov [rax], byte 0x01 ;SegFault
mov rax, 60
syscall
中所述
sbrk()
按增量字节递增程序的数据空间。 可以使用增量为0的sbrk()
来查找当前值 程序中断的位置。
我在运行程序时发生了分段错误。 segfaulted mov
之前的注册内容是:
rax 0x401000 4198400
rbx 0x0 0
rcx 0x40008c 4194444
我还尝试按如下方式递减rax
值:
BYTES_TO_ALLOCATE equ 0x08
_start:
mov rax, 12 ;sys_brk number
mov rdi, BYTES_TO_ALLOCATE
syscall
mov rbx, rax
dec rbx
mov [rbx], byte 0x01 ;Again SegFault
mov rax, 60
syscall
现在,我对如何使用sys_brk
返回值感到困惑。我从here拿走了它。我还尝试在rcx
中使用值,但无论如何都要使用。