我有一个 C++ 测试项目,其中包含一堆具有相同实现的 stub 函数。这些 stub 意味着在运行时使用 Windows Detours 被“替换”。问题是,在 Release模式下,编译器使所有这些 stub 指向相同的实现。为了说明这一点,请考虑以下代码:
#include <iostream>
using namespace std;
void A() { cout << "stub" << endl; }
void B() { cout << "stub" << endl; }
void main()
{
cout << &A << ", " << &B << endl;
}
在 Debug模式下,指针值会有所不同。在 Release模式下,它们是相同的。 我尝试了 pragma optimize 指令(我使用的是 Microsoft 编译器),但它没有解决问题。结果,我的 Windows Detours Hook 拦截了对相同 stub 的所有调用。
我该如何解决这个问题? 谢谢。
最佳答案
尝试使用预处理器宏使您的 stub 函数独一无二,这样优化器就不会将它们合并为一个。
__FILE__, __LINE__, and __FUNCTION__ usage in C++
像这样:
void A() { cout << __FUNCTION__ << endl; }
void B() { cout << __FUNCTION__ << endl; }
关于c++ - 编译器优化合并相同的函数实现意味着在运行时要绕行的 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13522531/