winapi - 使用masm(汇编代码)向控制台编写简单的字符串

标签 winapi assembly masm masm32

我想使用writeconsole API在控制台输出中写入一个字符串,但是它不起作用
我在masm中使用控制台链接并构建它

这是代码

.386
.MODEL Flat,STDCALL
option casemap:none 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\kernel32.lib 

STD_OUTPUT_HANDLE EQU -11

.DATA
Msg  db "Hello World",13,10,0
lmessage dd 13

.DATA?

consoleOutHandle dd ? 
bytesWritten dd ?

.code
start:
INVOKE GetStdHandle, STD_OUTPUT_HANDLE
mov [consoleOutHandle],eax

invoke WriteConsole, consoleOutHandle,offset Msg,offset lmessage,offset bytesWritten,0
INVOKE ExitProcess,0 
end start

当我运行exe输出时
我得到以下

C:\ masm32> 18.exe

C:\ masm32>

空输出

所以有什么建议

最佳答案

第三个参数是要写入的字符数,而不是要写入的字符数的地址。对您来说幸运的是,该地址超过64K,导致调用失败,错误代码为ERROR_NOT_ENOUGH_MEMORY。

关于winapi - 使用masm(汇编代码)向控制台编写简单的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9864854/

相关文章:

C: WinAPI CreateDIBitmap() 来自 byte[] 问题

c - 检测所有当前发出信号的信号量

c++ - 需要帮助通过引用类传递 Windows 事件句柄

linux - 为什么 NOP 的数量似乎会影响 shellcode 是否成功执行?

arrays - 在 .data 中对数组进行索引会导致地址远高于数组

c++ - 查看winapi函数是否可用

python - Python 是将函数参数加载到寄存器中还是将它们保存在堆栈中?

assembly - 有哪些 x86 指令会对 ESP 产生副作用?

assembly - 如何制作一个自动构建、链接和执行 .asm 文件的批处理文件?

汇编 x86 MASM 循环分析