linux - nasm 程序打印了比它应该打印的更多的参数

标签 linux command-line nasm

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

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/

相关文章:

linux - 混淆 ns2 : agents classifiers and nodes

linux - Bash:单引号、双引号和感叹号

linux - ps:只获取父进程的干净方法?

powershell - 通过 TeamCity 将带引号的参数传递给 PowerShell 脚本

assembly - 如何使用汇编 (NASM) 从 CD-ROM 将内核加载到内存中

assembly - 将 Go 链接到任意目标文件(程序集)?

linux - 使用/dev/fb0而不是root,写入显存

python - 在python中建立与某个网页的连接

linux - 在 x64 位程序集中执行系统命令?

基于Python SSH的基于Web的远程目录/文件查看器