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`(с кавычками)
, что Вы видите?