Linux 为什么我没有得到分割错误?
我对汇编编程和简单示例和gdb的体验还不熟悉。这是我写的程序: 1.asm 编译、链接(使用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 ; <-
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