从程序集中访问类方法

Posted

技术标签:

【中文标题】从程序集中访问类方法【英文标题】:Access to a class method from assembly 【发布时间】:2013-06-19 21:06:03 【问题描述】:

我试图用 C++ 编写操作系统的基础。为了管理中断,我不得不编写一些 asm 行,它们使用在 asm 中声明的外部 C++ 代码 external name_of_the_function。我将其中一个函数放在一个类中,但我不知道如何(external Class::method 不起作用)。我发现这样做的唯一方法是创建一个调用类方法的函数,但是是否可以从程序集中直接访问该方法? (假设这些方法是静态的)

【问题讨论】:

您可能想查找 name mangling:en.wikipedia.org/wiki/Name_mangling 看看 Agner Fog 的 calling conventions 指南。 【参考方案1】:
    查看您的 C++ 目标文件,找到您要调用的函数的错位符号名称。 在汇编文件中声明该错位函数名称 externalglobal 或您的汇编程序所需的任何语法。 像调用 C 函数一样调用它(如果是实例方法,您可能需要找到 this 指针)。

【讨论】:

3. (记得传递this作为函数的第一个参数) @Massa - 我认为我的回答已经说明了这一点。也许您看到的是缓存版本?除此之外,如果它是 OP 所说的静态(类)方法,则没有隐含的this,是吗?

以上是关于从程序集中访问类方法的主要内容,如果未能解决你的问题,请参考以下文章

在 .NET 程序集中内部化类和方法

多态—虚方法抽象类接口

访问修饰符 程序集 静态方法

访问修饰符

javaOO 面向对象集中注意

从其他类Objective-C访问方法