在 C++ 中,我可以通过获取成员函数的地址轻松创建函数指针。但是,是否可以更改该本地函数的地址?
即假设我在同一个类中有 funcA() 和 funcB(),定义不同。我希望将 funcA() 的地址更改为 funcB() 的地址,这样在运行时调用 funcA() 实际上会调用 funcB()。我知道这很丑陋,但我需要这样做,谢谢!
编辑------------
我正在尝试做的事情的背景:
我希望为现有代码库实现单元测试,我的所有模块都继承的基类中的一些方法是非虚拟的。我不允许编辑任何生产代码。我可以摆弄构建过程并在基类中替换相关方法设置为 virtual 但我想我宁愿使用这样的 hack(我认为这是可能的)。
此外,出于技术好奇心,我对这个主题很感兴趣,因为通过尝试破解这个问题的过程,我学到了很多关于代码生成和函数查找等事情在引擎盖,我刚读完大学二年级,还没有机会在学校学习。我不确定我是否会在学校教过这样的东西,因为我正在学习计算机工程类(class)而不是 CS。
回到主题 方法 funcA() 和 funcB() 确实具有相同的签名,所以问题是我只能使用 & 运算符获取函数的地址?我不能更改函数的地址,或者在不损坏部分内存的情况下换出该地址的内容,这样说是否正确?如果将函数导出到 dll,那么 DLL 注入(inject)是否是解决此类情况的好方法?
最佳答案
没有。函数被编译成可执行文件,并且它们的地址在程序的整个生命周期中都是固定的。
最接近的是虚函数。请举例说明您要实现的目标,我保证有更好的方法。
关于c++ - 更改C++中成员函数的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2367180/