sys_write输出多余的字符

时间:2019-10-27 16:20:31

标签: assembly x86-64 nasm

因此,我正在编写一个基于菜单的程序,该程序可以显示一条消息(除其他尚未实现的功能外)。我有以下部分:

mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall

无论出于何种原因,它都会输出存储在msg中的字符串,以及我存储在.data部分中的所有其他字符串。我已经使用gdb运行了该程序,并在系统调用之前立即打印了rsi和rdx的内容-它们包含我要输出的字符串以及该字符串的长度,与预期的一样。但是在系统调用之后,rax包含2048。如果我正确理解,则意味着已向控制台写入2048个字符-比我在系统调用前指定的30个字符要多得多。我猜我已经将其他字符串存储在内存中msg之后的位置,这就是为什么它们得到输出的原因,但是为什么却忽略了rdx?

就其价值而言,如果msg_len是不可变的,则代码可以正常工作,但我需要使它可变,因为msg可以更改。

1 个答案:

答案 0 :(得分:0)

您说当您尝试只输出其中一个称为msg的字符串时,它会输出所有字符串。

您可以使用CMPJE(或JZ,它们相同)进行循环计数直到NULL。然后,您可以将此数字用作LEN来打印字符串。

相关问题