консольный "Привет, мир!" в х64-стиле

 

Вчера на группе идиотов "Типичный погромизд" выложили картинку, но потом удалили. Мне захотелось вспомнить старое, и написать консольный выхлоп на Flat Assembler. Получилось не сразу, так как забыл тонкости программирования:


format PE64 console
include 'win64wx.inc'
entry start

section '.text' code readable executable
start:
    ; Get a handle to the standard output
        mov     rcx,STD_OUTPUT_HANDLE
        call    [GetStdHandle]
    ; Write the message to the console
        mov     rcx,rax
        lea     rdx,[message]
        mov     r8d,message_length
        lea     r9,[rsp+4*8]
        mov     qword[rsp+4*8],0
        call    [WriteConsoleW]
    ; Exit the process
        mov     rcx,rax
        call    [ExitProcess]

section '.data'data readable writeable
  message du 'Hello, World!', 0
  message_length = $ - message - 1 ; Calculate length, excluding null terminator

section '.idata' import data readable
  library kernel32, 'kernel32.dll'
  import kernel32, \
         GetStdHandle, 'GetStdHandle', \
         WriteConsoleW, 'WriteConsoleW', \
         ExitProcess, 'ExitProcess'

Остальные версии тут.

Комментарии