Pointers 如何在MASM中调用指向函数的指针
所以我试图调用一个指向函数的指针,但失败了。有人能帮忙吗 我这样存储函数指针:Pointers 如何在MASM中调用指向函数的指针,pointers,assembly,function-pointers,invoke,masm,Pointers,Assembly,Function Pointers,Invoke,Masm,所以我试图调用一个指向函数的指针,但失败了。有人能帮忙吗 我这样存储函数指针: mov pFunction,offset Function 通过这样做,我实际上可以接到工作电话: call pFunction 但当我尝试这个: invoke pFunction invoke Function pFunction 我得到“错误A2190:调用过程需要原型” 如果我试试这个: invoke pFunction invoke Function pFunction 我得到“错误A2206:表
mov pFunction,offset Function
通过这样做,我实际上可以接到工作电话:
call pFunction
但当我尝试这个:
invoke pFunction
invoke Function pFunction
我得到“错误A2190:调用过程需要原型”
如果我试试这个:
invoke pFunction
invoke Function pFunction
我得到“错误A2206:表达式中缺少运算符”
有什么想法吗
PS:以下是完整的列表:
.386
.model flat,stdcall
option casemap: none
include d:\masm32\include\windows.inc
include d:\masm32\include\kernel32.inc
includelib d:\masm32\lib\kernel32.lib
Function proto
.data?
pFunction dd ?
.code
start:
mov pFunction,offset Function
invoke pFunction
push 0
call ExitProcess
Function proc
ret
Function endp
end start
我在这里找到了答案 这就是你必须做的:
.386
.model flat,stdcall
option casemap: none
include d:\masm32\include\windows.inc
include d:\masm32\include\kernel32.inc
includelib d:\masm32\lib\kernel32.lib
FUNCPROTO TYPEDEF PROTO
FUNCPTR TYPEDEF PTR FUNCPROTO
.data?
pFunction FUNCPTR ?
.code
start:
mov pFunction,offset Function
invoke FUNCPTR ptr pFunction
push 0
call ExitProcess
Function proc
ret
Function endp
end start
我刚刚在这里找到了答案,虽然我觉得有点疯狂。。。(为什么我只能在8小时后回答我自己的问题?!)调用宏是否在所有情况下都不完整?显然,如果您不介意使用它进行自己的设置/拆卸,那么调用将起作用(在过去,我们一直这样做,因为汇编程序中没有“调用”)。同样值得注意的是,您引用的索赔所调用的文档扩展了比预期项目短的宽度。我遇到了一个案例,但最近情况并非如此。当它返回时,我有一个导致崩溃的调用。在OlyDbg中打开它,发现它将一个项目(在32位应用程序中)作为单词而不是dword推送!链接已断开,备选方案: