2021-03-10 15:41:07
Wassup, сегодня познакомимся с Assembler
Assembler —
язык программирования низкого уровня, представляющий собой формат записи машинных команд, удобный для восприятия человеком. Ассемблер – чрезвычайно гибкий язык, позволяющий максимально использовать ресурсы операционной системы и компьютера,
например многие изъяны безопасности проявляются только на уровне машинного кода и могут быть устранены только с этого уровня.
Инструкции ассемблера для процессора x86 могут иметь один, два, три операнда или не иметь их вообще. Операндами выступают численные значения, адреса памяти или регистры процессора. В качестве операндов используются регистры
ebx, edx, esi, ecx и другие,
mov копирует значение из одного операнда в другой.
Инструкция
int 0x80 — это системный вызов на базе первых четырех регистров, регистр eax указывает, какой именно вызов следует осуществить, в то время как в регистрах
ebx, ecx содержатся его первый, второй и третий аргументы (задаются инструкцией
mov).
Рассмотрим
print.asm, для вывода мы использовали функцию
write (
SYSCALL: write(1, msg, 50) ) , в неё помещается
eax номер системного вызова
4. После помещаем значение
1 в
ebx. Помещаем в регистр
ecx помещаем адрес нашей строки в сегменте данных, и указываем длину байта (
mov edx, 50). Завершаем программу вызовом функции
exit SYSCALL: exit(0)
с аргументом
0, потом помещаем в
eax номер системного вызова этой функции —
1, а значение аргумента в
ebx:
mov eax, 1
mov edx, 0
int 0x80
Теперь нам перевести код в бинарный файл, давайте поставим
nasm:
apt -y install nasm
Получаем объектный файл формата
ELF:
nasm -f elf64 print.asm -o print.o
Превращаем его в исполняемый двоичный файл
a.out:
ld print.o
./a.out (print.asm):
Antichrist Blog
./a.out (input.asm):
Input: 666
Printing: 666
Это вам не print("Antichrist Blog") в python, также я оставил ещё одну программу в Archive (input.asm)
Antichrist Blog, APK, Music, Chat
4.0K viewsedited 12:41