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;
}
}
答案 0 :(得分:3)
根据msdn documentation" __asm块只能调用未过载的全局C ++函数。"
一种解决方案是添加一个可以从asm调用的辅助函数。类似的东西:
bool equalCharPtr(char const *str)const { return *this == str; }
当然这仅适用于Visual C ++。其他编译器可能会有所不同。