小编Eri*_*man的帖子

如何在汇编中正确调用 64 位 Windows API

使用 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
Run Code Online (Sandbox Code Playgroud)

编译者

nasm -f win64 test.asm
gcc -s -o test.exe test.obj
Run Code Online (Sandbox Code Playgroud)

windows 64-bit assembly nasm

1
推荐指数
1
解决办法
2186
查看次数

标签 统计

64-bit ×1

assembly ×1

nasm ×1

windows ×1