【问题标题】:Why can't I print the user input data in NASM assembly?为什么我不能在 NASM 程序集中打印用户输入数据?
【发布时间】:2014-04-26 00:43:49
【问题描述】:

我正在尝试验证此示例中用户输入的长度 (NASM):

section .bss
    user_input resb 10

section .text
    push ebp
    mov ebp, esp

    mov eax, 3 ;sys_read
    mov ebx, 0 ;stdin
    mov ecx, user_input
    mov edx, 10
    int 80h

    cmp eax, 10
    jg overflow
    jmp done 
overflow:
    .
    .
    .
done:
    mov eax, 1
    int 80h

为什么这不起作用?

【问题讨论】:

    标签: linux assembly x86 nasm


    【解决方案1】:

    由于您的缓冲区是 10 字节,并且您将长度放入 edx,因此返回值永远不会大于 10,因此您跳转到标签 done: 并退出。

    您显示的代码中没有任何内容可以打印出来。

    【讨论】:

    • 但是如果我输入超过 10 个字符(带有 '\0'),它会被程序接受......我想避免这种情况。我该怎么做??
    • cmp byte [ecx + eax - 1], 10] - 如果换行符在您的缓冲区中,则没有溢出。如果没有,请继续读取虚拟缓冲区,直到出现换行符。不涉及 '\0' (除非您覆盖换行符)。当然,用 sys_write 打印它(打印 edx 字节 - 不会在 '\0' 或 '\n' 处停止)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2012-11-14
    • 1970-01-01
    • 2015-09-09
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多