1

我正在尝试编写一个简单的程序来从标准输入中获取一些字符。为简洁起见,相关代码为:

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是调用系统调用的传统方式,应该避免”。(链接

我真的找不到任何好的文档,所以任何输入都将不胜感激。

编辑:错字

4

1 回答 1

0

检查这个问题。在 x86_64 上,正确的退出系统调用$60应该在%rax.

 mov $60, %rax
 mov $0, %rdi 
 syscall
于 2015-08-21T11:26:06.793 回答