【问题标题】:How to declare a function pointer in MASM?如何在 MASM 中声明函数指针?
【发布时间】:2014-02-25 17:19:29
【问题描述】:

我在Windows上有一些masm语法代码是这样的:

stru_40DBA0 dd 0FFFFFFFEh       ; GSCookieOffset ; SEH scope table for function 402B22
dd 0            ; GSCookieXOROffset
dd 0FFFFFFC0h       ; EHCookieOffset
dd 0            ; EHCookieXOROffset
dd 0FFFFFFFEh       ; ScopeRecord.EnclosingLevel
dd 0            ; ScopeRecord.FilterFunc
offset $LN19        ; ScopeRecord.HandlerFunc
.....
Foo proc near
....
$LN19:
....

masm会在offset $LN19这一行产生错误,我尝试这样修改:

PTR PROTO $LN29

谁能给我一些关于如何声明的帮助?谢谢!

【问题讨论】:

  • 我认为offset Foo 会起作用。
  • 您需要定义一些位置来存储该偏移量,因此它类似于dd offset $LN19(或dq offset $LN19)。
  • @JerryCoffin 是的,我也试过 dd offset $LN19,但是会产生类似“undefined symbol $LN19”的错误
  • @500-InternalServerError 但我必须存储 $LN19 的偏移量... $LN19 在函数 foo 中
  • @computereasy:要么将其公开:public $LN19,要么在其后加一个双冒号:$LN19::。对于这种情况,我通常更喜欢后者。

标签: winapi assembly masm masm32


【解决方案1】:

你需要做两件事:

  1. 确保标签是公开的,以便可以看到您使用偏移量的位置。
  2. 确保标签已在您使用其偏移量的位置声明。

实现后者的简单方法是在定义标签本身之后定义结构。

要使标签公开,您可以明确将其声明为公开,例如:

public $LN19

...或者在您定义标签的地方,您可以使用两个冒号而不是一个:

$LN19::

【讨论】:

    猜你喜欢
    • 2018-11-11
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2020-04-13
    • 1970-01-01
    • 2012-03-08
    相关资源
    最近更新 更多