С помощта на NASM и Mingw-w64 се опитвам да стартирам следната програма, която трябва да отпечата съобщение на екрана с помощта на Windows API. Работи, но нищо не се показва на конзолата и води до невалиден достъп до място в паметта (код на грешка 0x3e6h). Защо е така и как мога да накарам програмата да работи правилно?
global main
extern ExitProcess
extern GetStdHandle
extern WriteFile
section .text
main:
mov rcx, 0fffffff5h
call GetStdHandle
mov rcx, rax
mov rdx, NtlpBuffer
mov r8, NtnNBytesToWrite
mov r9, NtlpNBytesWritten
mov dword [rsp - 04h], 00h
call WriteFile
ExitProgram:
mov rcx, 00h
call ExitProcess
section .data
NtlpBuffer: db 'Hello, World!', 00h
NtnNBytesToWrite: dd 0eh
section .bss
NtlpNBytesWritten: resd 01h
Съставен от
nasm -f win64 test.asm
gcc -s -o test.exe test.obj
WriteFile
, и да видите нейното разглобяване в 64-битова компилация? - person Alex F   schedule 23.07.2014