获取重载运算符的内存地址?

时间:2014-10-05 23:19:07

标签: c++

MyString类头文件的摘录。

class MyString
{
...
public:
    bool IsEmpty(void) const;
    bool operator==(MyString const &)const;
    bool operator==(char const *)const;
...
};

现在我在汇编程序中调用MyString的方法,它运行得很好。

__declspec(naked)
void Injected() {
    __asm {
        //setup Call Parameters
        //...
        call MyString::IsEmpty  //bool IsEmpty(void) const;
    }
}

对该方法有效的方法对操作员不起作用。 是否可以获取重载运算符的地址并在汇编程序中调用它?

__declspec(naked)
void Injected() {
    __asm {
        //setup Call Parameters
        //...
        call MyString::operator==  //bool operator==(char const *)const;
    }
}

1 个答案:

答案 0 :(得分:3)

根据msdn documentation" __asm块只能调用未过载的全局C ++函数。"

一种解决方案是添加一个可以从asm调用的辅助函数。类似的东西:

bool equalCharPtr(char const *str)const { return *this == str; }

当然这仅适用于Visual C ++。其他编译器可能会有所不同。