c++ - 编译器优化合并相同的函数实现意味着在运行时要绕行的 stub

标签 c++ compiler-optimization detours

我有一个 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/

相关文章:

c++ - 功能与安全/静态与动态实例化

optimization - LLVM opt mem2reg无效

编译器标志更改代码行为(O2、Ox)

c - 长度为 8 的结构和 uint64_t 的效率

c++ - Deviarev2 Hook API : Hook into existing process winapi calls?

时间:2019-03-08 标签:c++d3dhooking-COMvtable

c++ - if 与 if/else 关于 bool 值

c++ - main() 方法中包含的类

c++ - 生成 "unique"矩阵

c++ - 钩子(Hook)查找窗口