【发布时间】:2023-01-03 01:19:21
【问题描述】:
我在 x64 Windows 操作系统中使用 MASM。我想调用 Windows API,然后将一些字符串输出到屏幕上。
我正在学习 Windows 操作系统中的 x64 汇编编程。今天我想将一些结果打印到控制台。然而,与linux操作系统不同的是,在windows中我们可以直接使用syscalls而不会有任何痛苦。我编写了以下程序来向控制台打印一条 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
对不起,如果你发现这个问题很愚蠢。我是堆栈溢出的新成员。谢谢你们。
【问题讨论】:
-
通常我会编写一个 C 程序并让 Visual Studio 生成汇编代码,这样我就可以看到用于 Windows API 的实际代码。
-
代码看起来正确(包括堆栈对齐、主空间和参数使用)。我已经在此处组装并链接了代码并使其正常运行。您将哪些选项传递给汇编器和链接器来生成程序?
标签: c assembly winapi x86-64 masm