Я заканчиваю курс по компьютерной архитектуре в этом семестре, где, помимо прочего, мы занимались сборкой MIPS и запускали ее в симуляторе MARS. Сегодня из любопытства я начал возиться с NASM на своем компьютере с Ubuntu и в основном просто собирал воедино из учебников и почувствовал, чем 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, собирается с nasm -f elf test.asm
и связывается с ld -o test test.o
. Когда я вызываю его с помощью ./test anArgument
, он печатает 'anArgument', как и ожидалось, за которым следует любое количество символов, необходимое для дополнения этой строки до 200 символов (из-за этого оператора mov edx, 200
). Интересно, однако, что эти дополняющие символы, которые я ожидал бы назвать бессмысленными, на самом деле происходят из моих переменных окружения, как показано командой env
. Почему это печатает мои переменные окружения?