printf.asm
comment *
ml64 /c /Fl printf.asm
link /subsystem:console /entry:start printf
*
includelib kernel32
includelib user32
extern ExitProcess:proc
extern GetStdHandle:proc
extern lstrlenA:proc
extern WriteConsoleA:proc
extern wsprintfA:proc
STD_OUTPUT_HANDLE equ -11
.const
fmt db 'RAX:%016Ix RBX:%016Ix RCX:%p', 0dh, 0ah, 0
.data?
hstdout dq ?
buf db 1024 dup (?)
.code
start proc
sub rsp, 28h
mov rcx, STD_OUTPUT_HANDLE
call GetStdHandle
mov hstdout, rax
lea rcx, offset buf
lea rdx, offset fmt
mov r8, 123456789abcdefh
mov r9d, r8d
mov qword ptr [rsp+20h], rdx
call wsprintfA
lea rcx, offset buf
call _puts
mov rcx, 0
call ExitProcess
start endp
str$ = 30h
_puts proc
mov qword ptr [rsp+8h], rcx
sub rsp, 28h
call lstrlenA
mov rcx, hstdout
mov rdx, qword ptr str$[rsp]
mov r8d, eax
xor r9d, r9d
mov qword ptr [rsp+20h], 0
call WriteConsoleA
add rsp, 28h
ret
_puts endp
end
出力例
RAX:0123456789abcdef RBX:0000000089abcdef RCX:00007FF6665C2040
最終更新:2021年10月09日 20:57