I have written x64 code, that takes input from user it is based on masm32 StdIn procedure(watched it under olly). I have complied it with ml64 and it works but i'm not sure is everything fine. I don't know system inside. I need to be certain, that it's OK. Could some one look at it?
includelib /masm64/lib/kernel32.lib
includelib /masm64/lib/user32.lib
WriteConsoleA proto :ptr, :ptr, :dword, :ptr, :dword
ReadConsoleA proto :ptr, :ptr, :dword, :ptr, :dword
GetStdHandle proto :dword
ExitProcess proto :dword
SetConsoleMode proto :dword, :dword
ReadFile proto :dword, :dword, :dword, :dword
STD_OUTPUT_HANDLE equ -11
STD_INPUT_HANDLE equ -10
.data
tMsg db "Hello x64 world",13,10
.data?
btText db 4 dup (?)
hStdOut dq ?
hStdIn dq ?
qWritten dq ?
qRead dq ?
.code
start proc
mov rax, 1
mov rax,2
mov rcx, STD_OUTPUT_HANDLE
call GetStdHandle
mov hStdOut, rax
mov rcx, rax
mov rdx, offset tMsg
mov r8, lengthof tMsg
mov r9, offset qWritten
mov qword ptr [rsp + 8 * 4], 0
call WriteConsoleA
mov rcx, STD_INPUT_HANDLE
call GetStdHandle
mov hStdIn, rax
mov rcx, rax
mov rdx, 7 ;ENABLE_ECHO_INPUT or ENABLE_LINE_INPUT or ENABLE_PROCESSED_INPUT
call SetConsoleMode
mov rcx, hStdIn
mov rdx, offset btText
mov r8, sizeof btText
mov r9, offset qRead
mov qword ptr [rsp + 8 * 4], 0 ;Is it fifth proc arg???
call ReadFile
mov rcx, hStdOut
mov rdx, offset btText
mov r8, sizeof btText
mov r9, offset qWritten
mov qword ptr [rsp + 8 * 4], 0
call WriteConsoleA
xor rcx, rcx
call ExitProcess
start endp
end
and other question:
mov qword ptr [rsp + 8 * 4], 0
is it fifth arg of WriteConsoleA?
thanks in advance