超难问题:修改虚函数表??????

jeedispeed jeedispeed 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
事出有因,关于回调函数的,想写一个万能的仿函数类.我的仿函数类有一个虚函数fun,我想修改这个fun这个函数的地址,地址为一个传入的函数指针,比如有仿函数类Visit.有一个void fun(char s)成员函数;重载().
使用这个类的方法
void (*fun)(char s);//函数指针,任意绑定一个函数,这样这个仿函数类就可以一劳永逸了.
Visit v; //比如定义 void fun1(char s){...操作...}
v.Set(fun); //fun=fun1
char s;
v(s);

#include <iostream>
class Base
{
private:
virtual void fun1(){std::cout<<"Bsed::fun1"<<std::endl;}
};
void fun1(){std::cout<<"fun1"<<std::endl;}
void main()
{
typedef void(*Fun)(void);
Base b;
Fun pFun;
std::cout<<"虚函数表开始地址:"<<(int*)(&b)<<std::endl;
std::cout<<"虚函数列表中第一个虚函数地址:"<<(int*)*(int*)(&b)<<std::endl;
std::cout<<"changed:"<<std::endl;
int *a=(int*)*(int*)(&b);
std::cout<<"a:"<<a<<std::endl;
Fun pFun2=&fun1;
*a=*(int*)(pFun2);
std::cout<<*a;
std::cout<<"虚函数列表中第一个虚函数地址:"<<(int*)*(int*)(&b)<<std::endl;
}
这是我的代码,提供个思路,但是没有成功,
...全文
评论 21
收藏 已收藏
分享
返回顶部
jeedispeed
C++ 语言 65,214 成员 250,514 内容