我有一个 C++ 测试项目,其中包含一堆具有相同实现的存根函数。这些存根旨在使用 Windows Detours 在运行时“替换”。问题是,在发布模式下,编译器使所有这些存根指向相同的实现。为了说明这一点,请考虑以下代码:
#include <iostream>
using namespace std;
void A() { cout << "stub" << endl; }
void B() { cout << "stub" << endl; }
void main()
{
cout << &A << ", " << &B << endl;
}
在调试模式下,指针值会有所不同。在发布模式下,它们是相同的。我尝试了编译指示优化指令(我使用的是 Microsoft 编译器),但它没有解决问题。结果,我的 Windows Detours 挂钩拦截了对相同存根的所有调用。
我怎样才能解决这个问题?谢谢。