39 lines
1008 B
NASM
39 lines
1008 B
NASM
|
include 'fasm2.inc'
|
||
|
|
||
|
format PE64 console
|
||
|
entry main
|
||
|
|
||
|
section '.data' data readable writeable
|
||
|
message db 'Hello World!', 13, 10
|
||
|
message_len = $ - message
|
||
|
written dq ?
|
||
|
|
||
|
section '.text' code readable executable
|
||
|
main:
|
||
|
sub rsp, 40 ; 32 + 8 for alignment
|
||
|
|
||
|
mov ecx, -11 ; STD_OUTPUT_HANDLE
|
||
|
call [GetStdHandle]
|
||
|
|
||
|
mov rcx, rax ; Handle
|
||
|
lea rdx, [message] ; Buffer
|
||
|
mov r8, message_len ; Length
|
||
|
lea r9, [written] ; Bytes written
|
||
|
push 0 ; Reserved parameter
|
||
|
sub rsp, 32 ; Shadow space
|
||
|
call [WriteConsoleA]
|
||
|
add rsp, 40 ; Cleanup stack + reserved param
|
||
|
|
||
|
xor ecx, ecx ; Exit code 0
|
||
|
call [ExitProcess]
|
||
|
|
||
|
section '.idata' import data readable
|
||
|
library kernel32,'KERNEL32.DLL'
|
||
|
|
||
|
include 'win64a.inc'
|
||
|
|
||
|
import kernel32,\
|
||
|
GetStdHandle,'GetStdHandle',\
|
||
|
WriteConsoleA,'WriteConsoleA',\
|
||
|
ExitProcess,'ExitProcess'
|