• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья ASM обучение #2 Установка ПО и первая программа

Сегодня мы установим среду разработки, и создадим свою первую программу

Сборка-Настройка Среды

Настройка Локальной Среды

Язык ассемблера зависит от набора инструкций и архитектуры процессора. В этом уроке мы сосредоточимся на процессорах Intel-32, таких как Pentium. Чтобы следовать этому руководству, вам понадобится:
  1. IBM PC или любой эквивалентный совместимый компьютер
  2. Копия операционной системы Linux
  3. Копия программы ассемблера NASM
  4. Есть много хороших ассемблерных программ, таких как ...
  5. Ассемблер Microsoft (MASM)
  6. Борланд Турбо ассемблер (ТАСМ)
  7. Ассемблер GNU (GAS)
Мы будем использовать ассемблер NASM, так как он бесплатный. Вы можете скачать его из различных веб-источников. Также на него много документации и вы можете получить много информации в сети. Может использоваться как в Linux, так и в Windows.

Установка NASM

Если вы выберете "инструменты разработки" при установке Linux, вы можете установить NASM вместе с операционной системой Linux, и вам не нужно загружать и устанавливать его отдельно. Чтобы проверить, установлен ли NASM, выполните следующие действия:
  1. Откройте терминал Linux.
  2. Введите whereis nasm и нажмите ENTER.
  3. Если он уже установлен, появится строка, например, nasm: /usr/bin/nasm. В противном случае вы увидите только nasm:, затем вам нужно установить NASM.
Чтобы установить NASM, выполните следующие действия:
  1. Проверьте веб-сайт netwide assembler (NASM) для получения последней версии.
  2. Скачайте исходный архив Linux nasm-X. XX.та.gz, где X. XX - номер версии NASM в архиве.
  3. Распакуйте архив в каталог, который создает подкаталог nasm-X. XX.
  4. Диск на NASM-Х. ХХ и ввести ./configure. Этот sh скрипт найдет лучший компилятор C для использования и настроит Makefiles.
  5. Введите make для создания двоичных файлов nasm и ndisasm.
  6. Введите make install, чтобы установить nasm и ndisasm в /usr/local/bin и установить man-страницы.
Это должно установить NASM в вашей системе. Кроме того, можно использовать дистрибутив RPM для Fedora Linux. Эта версия проще в установке, просто дважды щелкните файл RPM.

Сборка - Базовый Синтаксис

Программа сборки можно разделить на три части:
  1. Раздел данных
  2. Раздел bss
  3. Текстовый раздел
Раздел данных

Раздел данных используется для объявления инициализированных данных или констант. Эти данные не изменяются во время выполнения. Можно объявить различные постоянные значения, имена файлов,размер буфера и т. д. в этом разделе.

Синтаксис для объявления раздела данных:
Код:
section.data
Секция BSS

Раздел bss используется для объявления переменных. Синтаксис для объявления раздела bss:
Код:
 section.bss
Текстовый раздел

Текстовый раздел используется для хранения фактического кода. Этот раздел должен начинаться с объявления global_start, которое сообщает ядру, где начинается выполнение программы.

Синтаксис для объявления текстового раздела:
Код:
 section.text global _start _start:
Комментарии

Комментарий на языке ассемблера начинается с точки с запятой (;). Он может содержать любые печатные символы, включая пробел. Он может появиться на линии сам по себе, как ...
Код:
 ; Эта программа отображает сообщение на экране
или, на той же линии, вместе с инструкцией, как
Код:
 add eax, ebx  ; добавляет значение регистра ebx в eax
Заявления На Языке Ассемблера

Программы на ассемблере состоят из трех типов операторов:
  1. Исполняемые инструкции или инструкции
  2. Директивы ассемблера или псевдо-операции
  3. Макросы
Исполняемые инструкции или просто инструкции говорят процессору, что делать. Каждая инструкция состоит из кода операции (opcode). Каждая исполняемая инструкция генерирует одну инструкцию машинного языка.

Директивы ассемблера или псевдо-opstell ассемблера о различных аспектах процесса сборки. Они не являются исполняемыми и не генерируют инструкции машинного языка.

Макросы-это в основном механизм подстановки текста.

Синтаксис операторов языка ассемблера

Операторы языка ассемблера вводятся по одному оператору на строку. Каждое заявление имеет следующий формат:
Код:
[label] mnemonic [операнды] [; комментарий]
Поля в квадратных скобках являются необязательными. Базовая инструкция состоит из двух частей, первая из которых-это имя инструкции (или мнемоника), которая должна быть выполнена, а вторая-операнды или параметры команды.

Ниже приведены некоторые примеры типичных операторов assembly language:
Код:
INC COUNT ; прирост памяти переменной
COUNT MOV TOTAL, 48; передача значения 48 в ; переменной памяти
TOTAL ADD AH, BH  ; добавить содержимое
BH регистрировать в AH зарегистрируйтесь
AND MASK1, 128;  ; переменная MASK1 and 128
ADD MARKS, 10 ; Добавить 10 переменной MARKS MOV AL, 10  ; первести значение 10 в AL регистр
Программа Hello World в ASM

Следующий код языка ассемблера отображает строку "Hello World" на экране −
Код:
section .text global _start ;должны быть объявлены для компоновщика (ld)
_start: ;говорит линкеру точку входа
mov edx,len ;сообщает длину
mov ecx,сообщение ;сообщение для записи
mov ebx,1 ;описатель файла (стандартный вывод)
mov eax,4  ;система вызывает номер (sys_write)
int 0x80 ;вызов ядра
mov eax,1 ;система вызывает номер (sys_exit)
int 0x80 ;вызов секции ядра
.data msg db 'Hello, world!', 0xa; строка для вывода
len equ $ - msg; длина строки
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Код:
Hello World!
Компиляция и связывание программы сборки в NASM

Убедитесь, что в переменной среды PATH задан путь к двоичным файлам nasmand ld. Теперь выполните следующие шаги для компиляции и компоновки программы
  1. Введите приведенный выше код с помощью текстового редактора и сохраните его как hello.asm.
  2. Убедитесь, что вы находитесь в том же каталоге, где сохранен hello.asm.
  3. Чтобы собрать программу, введите nasm - f ELF hello.asm
  4. Если есть какая-либо ошибка, вы будете оповещены об этом на данном этапе. В противном случае объектный файл программы с именем Hello.o будет создан.
  5. Чтобы связать объектный файл и создать исполняемый файл с именем hello, введите ld-m elf_i386-s-o hello hello.о
  6. Выполните программу, введя ./hello
Если вы все сделали правильно, он отобразит " Hello, world!'на экране.

Хотелось бы сказать сразу для критиков, это перевод!

Также скажу, что у меня есть ноутбук 2003 года на базе Pentium M, соответственно, всё описанное в этой статье будет в ближайшие дни продемонстрировано, со скринами и прочими интересными и нужными вещами.

За сим я откланяюсь, ждите практики на моём древнем ноуте, желаю хорошего дня.


P.S. я прикрепил опрос, по поводу практики на моём примере
 
E

EdmonDantesDuma

Один из вариантов рабочего текста программы на просторах сети под NASM:

SECTION .DATA
hello: db 'Hello world!',10
helloLen: equ $-hello

; Code goes in the text section
SECTION .TEXT
GLOBAL _start

_start:
mov eax,4 ; 'write' system call = 4
mov ebx,1 ; file descriptor 1 = STDOUT
mov ecx,hello ; string to write
mov edx,helloLen ; length of string to write
int 80h ; call the kernel

; Terminate program
mov eax,1 ; 'exit' system call
mov ebx,0 ; exit with error code 0
int 80h ; call the kernel


Компилирование, линковка, запуск.
# Compile
nasm -f elf64 hello.asm -o hello.o

# Link
ld hello.o -o hello

# Run
./hello
 
  • Нравится
Реакции: CKAP и dieZel
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!