FASM, win64asm, my first attempt build


http://wp.me/ph3BR-1Xe

 

有實驗過 win32 asm 編譯, http://wp.me/ph3BR-1WJ

要試試看 win10 電腦和 64 BIT CPU, 網路上面有 小木偶組合語言教學網頁, 看起來很複雜, 弄了一下, 搞不定, 所以只看了有關 64BIT CPU 的部分.

然後網路搜尋了一些參考的資料, 繼續用 FASM, 果然很快就做好了一個 win10 64位元的應用程序示範, 抄來的源碼. 初次用 FASM 列出 LISTING, 看了一陣子 HELP, 寫了一個 build.bat, 方便編譯不用每次手動輸入指令. build.bat, 編譯源碼用, 例如把 a.asm 拖到這個 build.bat, 就會執行編譯動作, 產生 a.asm.exe. 如果用 command prompt 手工輸入, 等同以下指令,
fasm a.asm a.asm.exe

build.bat
@echo off

REM Readme first
REM 2017-MAR-25, xioalaba
REM Uses FASMW or FASM, goto C:\fasmw17160\TOOLS\WIN32
REM to build three tools one time, listing.exe, prepsrc.exe, symbols.exe

SET FASM=C:\fasmw17160
SET TOOLS=C:\fasmw17160\TOOLS\WIN32
SET INCLUDE=C:\fasmw17160\INCLUDE

set path=%FASM%;%INCLUDE%;%TOOLS%;%path%
REM path

if exist %TOOLS%\listing.exe goto skip
@echo ---- Uses FASMW or FASM, goto C:\fasmw17160\TOOLS\WIN32
@echo ---- To build three tools one time, listing.exe, prepsrc.exe, symbols.exe
fasm.exe %TOOLS%\listing.asm %TOOLS%\listing.exe
fasm.exe %TOOLS%\prepsrc.asm %TOOLS%\prepsrc.exe
fasm.exe %TOOLS%\symbols.asm %TOOLS%\symbols.exe
:skip

@echo FASM build.bat, by xiaolaba, MAR/26/2017
@echo.
@echo ---- Drag .asm file to this build.bat, produce .exe and .fas
fasm.exe %1 %1.exe -s %1.fas

@echo.
@echo ---- Uses .fas, produce .lst
listing -a %1.fas %1.lst

@echo.
@echo ---- Uses .fas, produce .src
prepsrc %1.fas %1.src

@echo.
@echo ---- Uses .fas, produce .fas
symbols %1.fas %1.sym

@echo DONE !!
pause 

 

 

fasm64bit_hello.asm, 源碼


;http://stackoverflow.com/questions/14599430/how-does-one-display-hello-world-without-using-the-benefits-of-a-high-level
; Example of 64-bit PE program

format PE64 GUI 
entry start 

section '.text' code readable executable 

  start: 
    sub     rsp,8*5          ; reserve stack for API use and make stack dqword aligned 

    mov     r9d,0 
    lea     r8,[_caption] 
    lea     rdx,[_message] 
    mov    rcx,0 
    call    [MessageBoxA] 

    mov     ecx,eax 
    call    [ExitProcess] 

section '.data' data readable writeable 

  _caption db 'Win64 assembly program',0 
  _message db 'Hello World! xiaolaba test, 2017-MAR-26',0x0d, 0x0a, '2nd line',0

section '.idata' import data readable writeable 

  dd 0,0,0,RVA kernel_name,RVA kernel_table 
  dd 0,0,0,RVA user_name,RVA user_table 
  dd 0,0,0,0,0 

  kernel_table: 
    ExitProcess dq RVA _ExitProcess 
    dq 0 
  user_table: 
    MessageBoxA dq RVA _MessageBoxA 
    dq 0 

  kernel_name db 'KERNEL32.DLL',0 
  user_name db 'USER32.DLL',0 

  _ExitProcess dw 0 
    db 'ExitProcess',0 
  _MessageBoxA dw 0 
    db 'MessageBoxA',0

 

 

編譯過程還有執行 fasm64bit_hello.asm.exe 的結果. 沒有 win32的電腦可用於實驗, 所以不確定是否真的完全是 win64 的應用程序. win10 64 底下就很正常, 包括完成關閉, 記憶體釋放.

FASM_build_asm.JPG

 

 

2017-03-28 update, WIN10 32bit, 實驗結果, 不可運行, 確認真的做好了一個純WIN64的可執行檔

 

 

 

 

最後看看, fasm64bit_hello.asm.src, 由 .fas 反向產生的源碼檔案, 內容和抄來的源碼一模一樣, 可見人家貼的是反編譯出來的.

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s