gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:50 25 4
gpt4 key购买 nike

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;
}
}

对方法有效的方法对运算符(operator)无效。是否可以获取重载运算符的地址并在汇编程序中调用它?

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

最佳答案

根据msdn documentation “__asm block 只能调用未重载的全局 C++ 函数。”

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

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

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

关于c++ - 获取重载运算符的内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26208232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com