2014-10-05 2 views
2

Экстракт файла заголовка класса 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

Вы можете бросить вызов в точке вызова? – Yakk

ответ

3

Согласно msdn documentation «блоку __asm ​​можно назвать только глобальные C++ функции, которые не перегружены.»

Одним из решений является добавление вспомогательной функции, которую вы можете вызвать из asm. Что-то вроде:

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

Конечно, это только для Visual C++. Другие компиляторы могут отличаться.