x86汇编(Linux)stdin读取系统调用返回1,没有数据输入

时间:2013-07-23 14:47:47

标签: linux assembly x86 stdin

当我将$ 0与%eax进行比较以进行错误检查时,并在出现提示时输入no input,则不会显示错误消息。但是,当我将$ 1与%eax进行比较并输入无输入时,将显示错误消息。我知道read syscall返回读入%eax的字节数,虽然我不确定为什么它在没有给出输入时返回一个字节被读取,man手册页也没有给我任何指示为什么会这样。 stdin输入是否以null结尾或者是其他什么?

 movl $3, %eax
 movl $0, %ebx
 movl $BUFFER, %ecx
 movl $BUFFER_SIZE, %edx
 int  $0x80

 cmpl $0, %eax
 jle  input_error

如果cmpl $ 0更改为cmpl $ 1,并且没有给出输入,则跳转到input_error,当没有给出输入时,cmpl $ 0程序流程继续进行。

1 个答案:

答案 0 :(得分:0)

您不能使用这些参数调用sys_read,并且期望没有输入。

sys_read正在阻止呼叫。因此,它会阻塞,直到出现一些输入。在您的情况下,IMO,您按ENTER键,在这种情况下,sys_read返回缓冲区中的1字节读取 - LF,ascii代码0Ah和eax = 1.

P.S。这不是我的工作,但更好地使用FASM或至少使用NASM。这样,您将在ASM编程中获得更多帮助。 GAS的语法非常糟糕。 :)