Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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 为什么我没有得到分割错误?_Linux_Assembly_Segmentation Fault_X86 64 - Fatal编程技术网

Linux 为什么我没有得到分割错误?

Linux 为什么我没有得到分割错误?,linux,assembly,segmentation-fault,x86-64,Linux,Assembly,Segmentation Fault,X86 64,我对汇编编程和简单示例和gdb的体验还不熟悉。这是我写的程序: 1.asm 编译、链接(使用ld)并运行程序后,它什么也不打印。因此,在执行syscall之前,我检查了寄存器的内容 (gdb) info registers rax 0x1 1 rbx 0x4000c5 4194501 rcx 0x0 0 rdx 0x6000e4000b 412331802635 ; <-

我对汇编编程和简单示例和gdb的体验还不熟悉。这是我写的程序:

1.asm

编译、链接(使用
ld
)并运行程序后,它什么也不打印。因此,在执行
syscall
之前,我检查了寄存器的内容

(gdb) info registers 
rax            0x1      1
rbx            0x4000c5 4194501
rcx            0x0      0
rdx            0x6000e4000b     412331802635  ; <-- obviously wrong
rsi            0x10000  65536
rdi            0x1      1
rbp            0x0      0x0
rsp            0x7fffffffdcc6   0x7fffffffdcc6
(gdb)信息寄存器
rax 0x1 1
rbx 0x4000c5 4194501
rcx 0x0 0

rdx 0x6000e4000b 412331802635
sys\u write
不会引发segfault,它只返回一个
-EFAULT
错误代码。您应该在
syscall
完成后在
rax
中看到这一点。另请参见

系统写入
不会引发segfault,它只会返回一个
-EFAULT
错误代码。您应该在
syscall
完成后在
rax
中看到这一点。另请参见

刚刚尝试过,得到了rax 0xFFFFFFFFFFF2-14
。现在明白了,非常感谢。只是尝试了一下,得到了
rax 0xfffffffffff2-14
。现在理解了,非常感谢。
read
不会导致segfault,它会返回一个错误。请在
strace
下运行您的程序,以解码参数并返回系统调用的值。有关asm调试提示的更多信息,请参见的底部。
read
不会导致segfault,它会返回一个错误。请在
strace
下运行程序,以解码参数并返回系统调用的值。有关asm调试提示的更多信息,请参见的底部。
section .text
    global _print_func

_print_func:
    pop rbx
    pop rdx
    pop rsi
    mov rax, 0x01
    mov rdi, 0x01
    syscall
    push rbx
    ret

section .data
    str: db 'Some string',0x0A,0x0D
    str_len: db $ - str
(gdb) info registers 
rax            0x1      1
rbx            0x4000c5 4194501
rcx            0x0      0
rdx            0x6000e4000b     412331802635  ; <-- obviously wrong
rsi            0x10000  65536
rdi            0x1      1
rbp            0x0      0x0
rsp            0x7fffffffdcc6   0x7fffffffdcc6