C语言 如何在x64 MASM程序中调用Windows API

wydwbb8l  于 2023-01-04  发布在  Windows
关注(0)|答案(2)|浏览(144)

我正在x64 Windows操作系统中使用MASM。我想调用Windows api,然后输出一些字符串到屏幕上。
我正在Windows操作系统中学习x64汇编编程。今天我想打印一些结果到控制台。然而,与Linux操作系统不同,在Windows中我们可以直接使用系统调用,而不会有任何麻烦。我写了下面的程序来打印一个hello world消息到控制台,但它没有显示任何内容。我不知道这段代码有什么问题。

GetStdHandle PROTO
ExitProcess PROTO
WriteConsoleA PROTO

.data
    message         DB "Hello World",0
    message_size    DW SIZEOF message

.code
    main PROC
        SUB RSP, 5 * 8  
        
        MOV RCX, -11           
        CALL GetStdHandle

        MOV RCX, RAX     
        LEA RDX, message
        MOV R8, SIZEOF message - 1
        LEA R9, message_size  
        MOV  QWORD PTR [RSP + 4 * SIZEOF QWORD], 0
        CALL WriteConsoleA

        MOV RCX, 0      
        CALL ExitProcess
    main ENDP
END
tzdcorbm

tzdcorbm1#

您是否将其链接为控制台应用程序?Windows区分写入stdout的控制台应用程序(这是您正在做的)和创建窗口并运行消息循环的GUI应用程序。
您需要指定/subsystem:console作为链接器标志。可能有一个MASM选项/指令做同样的事情。

l7wslrjt

l7wslrjt2#

将汇编语言文件添加到现有Visual Studio C++项目(控制台/SUBSYSTEM:CONSOLE X64应用程序)后,代码运行良好。

相关问题