使用sbrk写入分配的内存会导致段错误

时间:2017-12-27 20:05:49

标签: linux assembly x86-64 sbrk

我试图用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 manual

中所述
  

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中使用值,但无论如何都要使用。

0 个答案:

没有答案