这学期我刚完成一门计算机体系结构课程,除其他外,我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它。今天,出于好奇,我开始在我的 Ubuntu 机器上摆弄 NASM,基本上只是从教程中拼凑起来,感受 NASM 与 MIPS 的不同之处。这是我目前正在查看的代码片段:
global _start
_start:
mov eax, 4
mov ebx, 1
pop ecx
pop ecx
pop ecx
mov edx, 200
int 0x80
mov eax, 1
mov ebx, 0
int 0x80
这被保存为 test.asm,并用 .asm 组装nasm -f elf test.asm
和链接ld -o test test.o
。当我用 调用它时./test anArgument
,它会按预期打印“anArgument”,然后是将该字符串填充到总共 200 个字符所需的字符数(由于该mov edx, 200
语句)。然而,有趣的是,这些填充字符,我原以为是乱码,实际上是从我的环境变量的开头开始的,正如env
命令所显示的那样。为什么这会打印出我的环境变量?