Почему эта программа получает SEGV? - PullRequest
1 голос
/ 28 марта 2019

У меня есть следующая программа, которая (я думаю) выделяет кучу виртуальной памяти (изменяя разрыв системы с помощью sys_brk), а затем пытается выполнить запись во вновь выделенную память. Тем не менее, я получаю SIGSEGV (при первой записи в память, и я не понимаю, почему).

[OP@localhost sys_brk]$ cat out_of_memory.s 
    .section .text
    .globl _start

_start:
    mov $12, %rax
    mov $0x1000000, %rdi
    syscall


    # i: index of memory we are writing to (%rax)
    mov $0x403000, %rax
evil_loop_start:
    cmp $0x1000000, %rax
    jge evil_loop_end

    mov %rax, (%rax)
    add 0x8, %rax
    jmp evil_loop_start
evil_loop_end:
    hlt
...