如何在 MASM 中调用指向函数的指针

发布于 2024-12-05 23:20:35 字数 842 浏览 0 评论 0原文

所以我试图调用指向函数的指针,但失败了。有人可以帮忙吗?

我像这样存储函数指针:

mov pFunction,offset Function

我实际上可以通过这样做来调用工作:

call pFunction

但是当我尝试这样做时:

invoke pFunction

我得到“错误 A2190:INVOKE 需要过程原型”。

如果我尝试这样做:

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

So I'm trying to invoke a pointer to a function, but I'm failing. Could somebody please help?

I'm storing the function pointer like so:

mov pFunction,offset Function

I can actually get the call to work by doing this:

call pFunction

But when I try this:

invoke pFunction

I get "error A2190: INVOKE requires prototype for procedure".

And if I try this:

invoke Function pFunction

I get "error A2206: missing operator in expression".

Any ideas?

PS: here is the whole listing:

.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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

塔塔猫 2024-12-12 23:20:35

我刚刚在这里找到答案

http://webster.cs.ucr.edu /Page_TechDocs/MASMDoc/ProgrammersGuide/Chap_07.htm

这是您必须做的:

.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

I just found the answer here

http://webster.cs.ucr.edu/Page_TechDocs/MASMDoc/ProgrammersGuide/Chap_07.htm

This is what you have to do:

.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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文