Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么该程序接收SEGV?_Linux_Assembly_X86 64_System Calls_Gnu Assembler - Fatal编程技术网

Linux 为什么该程序接收SEGV?

Linux 为什么该程序接收SEGV?,linux,assembly,x86-64,system-calls,gnu-assembler,Linux,Assembly,X86 64,System Calls,Gnu Assembler,我有下面的程序,它(我想)分配一堆虚拟内存(通过使用sys_brk更改系统中断),然后尝试写入新分配的内存。然而,我收到了一个SIGSEGV(在第一次内存写入时,我不明白为什么) 调用值为0的sys_brk以获取RAX中的当前brk。添加要RAX的额外空间量,然后再次调用sys_brk,将该值作为参数。还需要使用Add$0x8,%RAX将8添加到RAX。您忘记了立即值的$。HLT也会出现故障。您应该使用sys\u exitsyscall@MichaelPetch谢谢为什么HLT会出现故障?是特权

我有下面的程序,它(我想)分配一堆虚拟内存(通过使用sys_brk更改系统中断),然后尝试写入新分配的内存。然而,我收到了一个SIGSEGV(在第一次内存写入时,我不明白为什么)


调用值为0的sys_brk以获取RAX中的当前brk。添加要RAX的额外空间量,然后再次调用sys_brk,将该值作为参数。还需要使用
Add$0x8,%RAX
将8添加到RAX。您忘记了立即值的
$
。HLT也会出现故障。您应该使用sys\u exitsyscall@MichaelPetch谢谢为什么HLT会出现故障?是特权指令,无法在用户模式下运行(环3)。它只能在内核(环0)或实模式下使用。@MichaelPetch I的印象是,当程序尝试无效的内存访问时,出现了SEGFULT。请使用值0调用sys_brk以获取RAX中的当前brk。添加要RAX的额外空间量,然后再次调用sys_brk,将该值作为参数。还需要使用
Add$0x8,%RAX
将8添加到RAX。您忘记了立即值的
$
。HLT也会出现故障。您应该使用sys\u exitsyscall@MichaelPetch谢谢为什么HLT会出现故障?是特权指令,无法在用户模式下运行(环3)。它只能在内核(环0)或实模式下使用。@MichaelPetch I的印象是,segfault是在程序尝试无效的内存访问时发生的。
[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