format pe64 console
entry start
include 'win64a.inc'
section '.text' code readable executable
start:
push rbp ; make stack 16 byte aligned. Needed for fastcall requirement.
sub rsp, 10*8 ; reserve stack for API use (for instance WriteFile needs 5 parameters)
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov [GetStdHandle_outputhandle], rax
invoke GetProcessHeap
mov [processHeapHandle], rax
invoke HeapAlloc, [processHeapHandle], HEAP_ZERO_MEMORY, 100*1024
mov [variableSpacePointer], rax
invoke WriteFile, [GetStdHandle_outputhandle], str0, [str0Length], ResultBytesWritten, NULL
invoke HeapFree, [processHeapHandle], 0, [variableSpacePointer]
pop rbp ; 16-byte alignment lost here...
invoke ExitProcess, 0
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL'
include 'api\kernel32.inc'
section '.data' data readable writeable
processHeapHandle dq 0
variableSpacePointer dq 0
GetStdHandle_outputhandle dq 0
ResultBytesWritten dd 0
str0 db 'Hello World!',0
str0Length dq $-str0