【发布时间】:2019-06-07 16:22:11
【问题描述】:
我正在尝试从 masm 中的 windows api 调用一个函数。
这是签名:
BOOL WINAPI SetConsoleScreenBufferSize(
_In_ HANDLE hConsoleOutput,
_In_ COORD dwSize
);
COORD 结构 dwSize 是按值传递的,但是当我尝试调用它时,函数失败了。
看起来像这样:
.DATA
dwSize COORD <20, 20>
.CODE
INVOKE SetConsoleScreenBufferSize,
hConsoleOutput,
dwSize
这会导致类型错误并且程序无法汇编。如果我传递对结构的引用,程序会汇编,但函数不起作用。我尝试过其他按值接受结构的函数,但没有成功。
【问题讨论】:
-
INVOKE 宏不知道如何按值传递结构,它是 C 语言约定。如何正确地做到这一点最好通过查看 C 编译器生成的反汇编来完成。应该产生像 MOV eax, dword ptr [dwSize] 这样的东西,现在你可以使用 eax 是第三个 INVOKE 参数。
标签: winapi assembly struct x86 masm