nasm 程序打印的参数多于应有的数量

nasm program printing more arguments than it should

我正在编写一个简单的程序,我应该在其中获取第一个命令行参数并将其打印到标准输出。 我的代码如下所示:

section .bss
env resb 100

section .text
global _start
_start:
mov rbp, rsp

add rbp, 16
mov rsi, arg
mov rsi, [rbp]

mov rax, 1
mov rdi, 1
mov rdx, 100
syscall

所以当我从 Linux 终端调用我的程序时,像这样:./program hello,我希望它打印出 "hello"。但是输出看起来像这样:helloLC_PAPER=bs_BA.UTF-8XDG_VTNR=7LC_ADDRESS=bs_BA.UTF-8SSH_AGENT_PID=1483XDG_SESSION_ID=c2LC。 我知道这些是环境变量,但我不明白为什么它们会被打印出来。

感谢任何帮助。

实际上如果你仔细检查你会发现打印了100个字符,从内存中的"hello"地址开始。

替换

mov rdx, 100

mov rdx, 5 ; len of "hello", instead of 100