我正在尝试编写一个简单的程序,它从stdin中抓取一些字符。为简洁起见,相关代码为:
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
是调用系统调用的传统方式,应该避免。 “ (Link)
我无法在此找到任何好的文档,所以任何输入都会受到赞赏。
编辑:拼写错误