【问题标题】:x86 Assembly (Linux) stdin read syscall returning 1 with no data inputx86 程序集 (Linux) 标准输入读取系统调用返回 1 且没有数据输入
【发布时间】:2013-07-23 14:47:46
【问题描述】:

当我比较 $0 和 %eax 以进行错误检查,并在提示时不输入任何内容时,不会显示错误消息。但是,当我将 $1 与 %eax 进行比较并且不输入任何输入时,将显示错误消息。我知道 read 系统调用返回读入 %eax 的字节数,尽管我不确定为什么在没有输入时它返回一个字节被读取,手册页也没有给我任何指示为什么会这样。标准输入输入是空终止的还是其他什么?

 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 程序流程继续。

【问题讨论】:

  • 你能展示你的代码吗?
  • 已编辑以包含代码

标签: linux assembly x86 stdin


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 2019-09-01
    • 2015-01-31
    • 1970-01-01
    相关资源
    最近更新 更多