编译器优化合并了相同的函数实现,这意味着在运行时要绕过存根



我有一个C++测试项目,其中包含一组具有相同实现的存根函数。这些存根将在运行时使用Windows Detours进行"替换"。问题是,在发布模式下,编译器会使所有这些存根指向同一个实现。为了说明这一点,请考虑以下代码:

#include <iostream>
using namespace std;
void A() { cout << "stub" << endl; }
void B() { cout << "stub" << endl; }
void main()
{
cout << &A << ", " << &B << endl;
}

在调试模式下,指针值将不同。在释放模式下,它们是相同的。我尝试了pragma优化指令(我使用的是Microsoft编译器),但它没有解决问题。结果,我的Windows Detours钩子拦截了对相同存根的所有调用。

我该怎么解决这个问题?谢谢

尝试使用预处理器宏使存根函数唯一,这样优化器就不会将它们合并为一个函数。

__FILE__、__LINE_和__FUNCTION_在C++中的使用

类似这样的东西:

void A() { cout << __FUNCTION__ << endl; }
void B() { cout << __FUNCTION__ << endl; }

相关内容

最新更新