Ассемблер

Описание 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:~$

Для получения ассемблерного кода с синтаксисом 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