Assembler #7 Аргументы командной строки

Assembler #7 Аргументы командной строки

https://t.me/Torchik_Ru

Доброго времени суток, господа. Сегодня мы продолжаем изучать ASM, а именно - аргументы командной строки.

Что такое аргументы командной строки?

Когда программа запускается из командной строки, Вы можете передать в неё аргументы к.с.

После имени бинарного файла указываются значения аргументов, разделённые пробелами. Все аргументы являются строками, а не числами.

Аргументы на стеке

Когда программа выполняется, аргументы автоматически загружаются на стек. Первый елемент в стеке - количество аргументов. Это число всегда не меньше 1. Остальные объекты на стеке - указатели на строки на zero-terminated строки, начиная с пути и продолжая самими аргументами.

*path - технически первый аргумент, *arg[1] - второй, *arg[2] - третий и так далее.

Сама система указывает аргумент *path, начиная с *arg[1] идут аргументы пользователя. Именно по этой причине argc всегда равен не менее чем 1.

Пример:

и тд...

Вывод количества аргументов

Этот код выведет количество аргументов, что были переданы нашей программе(include-файл):

%icnlude "linux64.inc"

section .data
  newline db 10,0

section .text
  global _start

_start:
  pop rax
  printVal rax
  print newline
  exit

Скачайте и соберите программу "argtest". Она выведет количество аргуметов и каждый аргумент отдельно.

Почему аргументы?

Аргументы позволяют получать данные от пользователя без необходимости создавать пользовательский интерфейс. Это позволяет передавать в программу вывод других программ.

Домашнее задание

Попробуйте самостоятельно передать программе "argtest" аргумент `ls`(с кавычками), что Вы видите?

Report Page