FASM — Вікіпедія

Flat assembler
Типасемблер
РозробникТомаш Гриштар
Стабільний випуск1.71.17 (29 січня 2014)
Версії1.73.32 (4 грудня 2023)[1]
Операційна системаDOS, DexOS, Win32, Linux, BSD, MenuetOS, KolibriOS
Мова програмуванняасемблер
ЛіцензіяЛіцензія BSD
Онлайн-документаціяflatassembler.net/docs.php?article=manual(англ.)
Репозиторійgithub.com/tgrysztar/fasm
Вебсайтflatassembler.net

FASM (flat assembler) — асемблер, для архітектур IA-32 та x86-64, використовує синтаксис Інтел. Відомий своєю швидкістю компіляції, оптимізацією розміру скомпільованого коду, портованістю на різні ОС та широкими можливостями препроцесора (макросами), що дозволяє автоматизувати безліч рутинних завдань. Він є низькорівневим асемблером та навмисно має лише невелику кількість опцій командного рядка. FASM є вільним та відкритим програмним забезпеченням.

FASM має біндинги до GUI та OpenGL на платформі Windows. Всі версії FASM можуть створювати файли таких форматів: «сирі» бінарники з пласкою адресацією (що використовуються передусім як DOS COM застосунки чи SYS драйвери), об'єктні файли: ELF чи COFF (як класичного так і MS-орієнтованого вигляду), чи застосунки у форматах MZ, ELF, PE (включно з драйверами WDM). Також існує неофіційний порт на архітектуру ARM (FASMARM).[2]

Історія

[ред. | ред. код]

Проект розпочав у 1999 році польський студент математики Томаш Гриштар. Перший публічний випуск був представлений 15 березня 2000 року. FASM сам повністю написаний на асемблері і йде із повним початковим кодом. З версії 0.90 FASM може скомпілювати свій власний код. Він використовувався для написання декількох операційних систем, включаючи MenuetOS та DexOS.

Архітектура

[ред. | ред. код]

Приклади

[ред. | ред. код]

Приклад Windows-програми «Hello, world!», яка викликає повідомлення за допомогою функції MessageBox:

         format  pe gui 4.0          entry   start          include 'win32a.inc'   start:          invoke  MessageBox,NULL,message,message,MB_OK          invoke  ExitProcess,0   message db 'Hello, World!',0             data    import          library kernel32,'kernel32.dll',\                  user32,'user32.dll'          include 'api/kernel32.inc'          include 'api/user32.inc'          end     data 

Або так:

         include 'win32ax.inc'  .code  main:          invoke  MessageBox,NULL,'Hello, World!','Fasm message box:',MB_OK          invoke  ExitProcess,0  .end main 

Трохи складніша версія, з визначенням секцій в PE-файлі:

         format  pe gui          entry   start          include 'win32a.inc'   section '.data' data readable writeable   message db      'Hello, World!',0   section '.code' code readable executable   start:          invoke  MessageBox,NULL,message,message,MB_OK          invoke  ExitProcess,0   section '.idata' import data readable writeable          library kernel32,'kernel32.dll',\                  user32,'user32.dll'          import  kernel32,\                  ExitProcess,'ExitProcess'          import  user32,\                  MessageBox,'MessageBoxA' 

Приклад простого застосунку в .COM форматі.

        org      100h          mov      ah,9h         mov      dx,hello         int      21h         mov      ah,8h         int      21h         int      20h   hello  db       13,10,"Hello, World!$" 

Приклад простого застосунку в ELF форматі.

format ELF executable 3 entry start  segment readable executable  start: 	mov	eax,4 	mov	ebx,1 	mov	ecx, msg 	mov	edx, msg_size 	int	0x80  	mov	eax,1 	xor	ebx, ebx 	int	0x80  segment readable writeable  msg db 'Hello world!',0xA msg_size = $-msg 

Див. також

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. https://flatassembler.net/download.php
  2. Жуковський, В.; Жуковська, Н.; Власюк, А.; Сафонюк, А. (24 жовтня 2019). Method of Forensic Analysis for Compromising Carrier-lock Algorithm on 3G Modem Firmware (англ.). IEEE. doi:10.1109/UKRCON.2019.8879941. Архів оригіналу за 24 червня 2021. Процитовано 20 червня 2021.