在 C++ 中,我可以通过获取成员函数的地址轻松创建函数指针。但是,是否可以更改该本地函数的地址?
即说我在同一个类中有funcA() 和funcB(),定义不同。我希望将 funcA() 的地址更改为 funcB() 的地址,这样在运行时调用 funcA() 实际上会导致调用 funcB()。我知道这很丑陋,但我需要这样做,谢谢!
编辑 - - - - -
我正在尝试做的事情的背景:
我希望为现有代码库实现单元测试,我的所有模块都继承的基类中的一些方法是非虚拟的。我不允许编辑任何生产代码。我可以摆弄构建过程并在基类中替换相关方法设置为虚拟,但我认为我宁愿使用这样的 hack(我认为这是可能的)。
另外,出于技术上的好奇心,我对这个话题很感兴趣,因为通过尝试解决这个问题的过程,我学到了很多关于代码生成和函数查找等事情的底层工作原理,其中我刚读完大学二年级,还没有机会在学校学习。我不确定我是否会在学校里学到这样的东西,因为我在计算机工程专业而不是 CS 专业。
返回主题 funcA() 和 funcB() 方法确实具有相同的签名,所以问题是我只能使用 & 运算符获取函数的地址?我是否正确地说我不能更改函数的地址,或者在不破坏部分内存的情况下换出该地址的内容?如果将函数导出到 dll,那么 DLL 注入对于这种情况会是一种好方法吗?