For faster navigation, this Iframe is preloading the Wikiwand page for FASM.

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.
{{bottomLinkPreText}} {{bottomLinkText}}
FASM
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?