Steward
分享是一種喜悅、更是一種幸福
程式語言 - Flat Assembler (FASM) - Win32 API - Hello, world!
參考資訊:
https://board.flatassembler.net/
main.asm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | format PE GUI 4.0 entry start include "c:\fasm\include\win32a.inc" section ". idata " import data readable writeable library user , " user32.dll ", kernel , " kernel32.dll " import user , MessageBox , " MessageBoxA " import kernel , ExitProcess , " ExitProcess " section ". data " data readable writeable szCaption db " main ",0 szContent db "Hello, world!",0 section ". text " code readable executable start : invoke MessageBox , NULL , szContent, szCaption, MB_OK invoke ExitProcess , 0 |
Line 1:執行檔的格式
Line 2:程式的進入點
Line 4:Header檔案
Line 6:Import區段
Line 7:使用到的Library
Line 9~10:使用到的Win32 API
Line 12:初始化的資料區段
Line 13~14:初始化的Global變數,型態是byte(char)且最後一個byte是0
Line 16:程式區段
Line 17:程式的進入點
Line 18:顯示Message對話盒,invoke其實就是call + push的綜合指令
Line 19:結束Process並且釋放相關資源
Makefile
export WINEPREFIX=/home/user/.wine_x86 TARGET=main MYWINE=box86 wine FASM32=/home/user/.wine_x86/drive_c/fasm all: ${MYWINE} ${FASM32}/fasm.exe ${TARGET}.asm run: ${MYWINE} ${TARGET}.exe clean: rm -rf ${TARGET}.exe
編譯、執行
$ make $ make run