我正在编写一个简单的程序,我应该在其中获取第一个命令行参数并将其打印到标准输出。 我的代码如下所示:
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
关于linux - nasm 程序打印了比它应该打印的更多的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48469396/