0

我正在尝试分配内存,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

linux手册中所述

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返回值。我从这里拿走了它。我也尝试使用 value inrcx但无论如何都会出现段错误。

4

0 回答 0