Ассемблер
Описание GNU AssemblerУстановка инструментария
host# apt-get install binutils
Регистры
RAX/EAX (Accumulate) - регистр общего назначения. Функции записывают в него результат.RCX/ECX (Counter) - регистр общего назначения. Обычно хранит счётчик для циклов.
RIP/EIP (регистр со ссылкой на следующую команду)
RSP/ESP (Stack Pointer) - указатель на стек
RSI/ESI (Source Index) - индексный регистр для операций над строками
RDI/EDI (Destination Index) - индексный регистр для операций над строками
RFLAGS/EFLAGS - регистр контрольных и статусных флагов
Примеры
Вызов функцииВывод текстовой строки в терминал
Условные переходы на метки
Таблица основных системных вызовов
Примеры на Youtube
Мнемокоды
описание GNU Assembler
Ассемблер для Mac OS X
Стек
Архитектура процессоров Интел
Архитектура процессоров ARMv8
Определения
Изучать язык ассемблера можно путём трансляции понятного исходного кода на языке C в исходный код на языке ассемблера:
host:~$ gcc -S hello_world.c
host:~$
host:~$ ls | grep hello
hello_world.c
hello_world.s
host:~$
host:~$
host:~$ ls | grep hello
hello_world.c
hello_world.s
host:~$
Для получения ассемблерного кода с синтаксисом Intel нужно указать опцию -masm=intel (по умолчанию -masm=att; AT&T)
host$ gcc -S -masm=intel test.c
В итоге получается файл hello_world.s, который содержит инструкции для процессора на языке ассемблера, которые можно попробовать разобрать, сопоставив с кодом исходника на C.
Книги по Ассемблеру
Programming ground up (GAS, AT&T) (english)NASM для ОС Unix (русский)
Компиляторы (принципы, технологии и инструментарий) 2-е издание (русский)
Linux assembly programming (english)
NASM x64 (english)
Reverse Engineering для начинающих (источник https://yurichev.com/)
Сайты
Для новичковexelab.ru
masm.ru
www.stolyarov.info (русский)
asm.sourceforge.net (english)
Зачем нужно знать всякие низкоуровневые вещи
Написание и отладка кода на ассемблере x86/x64 в Linux
Шпаргалка по основным инструкциям ассемблера x86/x64
Introductory Intel x86: Architecture, Assembly, Applications, & Alliteration