Assembly
از اولین قدم تا محصول واقعی
Assembly x86-64 را روی Linux با NASM یاد بگیر؛ از syscall و رجیستر تا stack، ABI، حافظه، GDB و پروژه hex.
این پروژه را در 20 قدم کوتاه میسازی. هر درس فقط یک موضوع تازه دارد و با نمونه قابل دیدن تمام میشود.
20 قدم کوتاه و مرتب
هر درس فقط یک مفهوم تازه دارد: اول خیلی ساده میخوانی، بعد مثال میبینی، کد را تغییر میدهی و با آزمون کوتاه مطمئن میشوی.
NASM، لینک و اولین exit
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
اولین خروجی با write syscall
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
رجیستر و mov
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
مبنای عدد و بیت
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
جمع، تفریق و flagها
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
cmp و پرش شرطی
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
حلقه با شمارنده
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
بخشهای data، bss و text
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
آدرسدهی آرایه
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
اندازه داده و little-endian
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
Stack با push و pop
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
تابع با call و ret
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
ABI و تماس با C
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
ضرب و تقسیم signed
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
ماسک و عملیات bitwise
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
پیمایش رشته تا null
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
خواندن stdin با syscall
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
دیباگ با GDB
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
مرز بافر و کنترل طول
یک مفهوم، یک مثال واقعی، یک تمرین و چند آزمون کوتاه.
پروژه؛ ابزار نمایش byte به hex
همه آموختهها را به یک پروژه کامل و قابل ارائه تبدیل کن.
ابزار خط فرمان تبدیل بایتهای ورودی به نمایش hexadecimal
این پروژه یک نمونه تزئینی نیست. مدل داده، قوانین، حالت خطا، آزمون و مسیر انتشار را قدمبهقدم کامل میکنی.
- تعریف مسئله و کاربر واقعی
- ساخت نسخه کوچک اما انتهابهانتها
- آزمون مسیر موفق، مرزی و خطا
- آمادهسازی خروجی برای ارائه و بازخورد
global _start
section .text
_start:
mov rax, 60
mov rdi, 0
syscall