Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 如何在MASM中调用指向函数的指针_Pointers_Assembly_Function Pointers_Invoke_Masm - Fatal编程技术网

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推送!链接已断开,备选方案: