我正在尝试编写一个简单的程序来从标准输入中获取一些字符。为简洁起见,相关代码为:
mov $3, %rax # sys_read = 3
mov $0, %rbx # stdin fd = 0
mov $b, %rcx # '.lcomm b, 32' declared in .bss section
mov $32,%rdx # size_t
# syscall
int $0x80
当我int $0x80
按预期使用程序功能时,但是syscall
会出现段错误。我读到这与使用中断需要内核记住机器的状态这一事实有关,syscall
而不遵守该要求,即内核在自己的时间处理它。我不确定这是否是真正的原因 - 我会假设这syscall
对寄存器做了一些sys_read
失败的事情。
我还从之前发布的一个问题中读到“syscall
是进入内核的默认方式”并且“int 0x80
是调用系统调用的传统方式,应该避免”。(链接)
我真的找不到任何好的文档,所以任何输入都将不胜感激。
编辑:错字