c++ - 防止 Visual Studio C++ 合并相同的函数

标签 c++ visual-studio optimization

为了获得函数的长度,我使用空函数来标记每个函数的结束位置,如下所示:

void f()
{
    printf("ooga\n");
}
__declspec(noinline, naked) void f_end() { __asm { nop } };

为了获得 f 的长度,我只需减去 f_end - f,对用作填充的任何 INT3 递减。

但是如果我添加另一个函数:

void g()
{
    printf("booga\n");
}
__declspec(noinline, naked) void g_end() { __asm { nop } };

f_end() 和 g_end() 似乎合并为一个函数(通过查看 OllyDbg 中的反汇编来验证)。如果我让每个功能都独一无二,它就不会发生,但我将需要大量这样的功能。

有没有我可以轻弹的优化开关来防止这种情况发生?

我浏览了 Visual Studio 菜单中可用的设置(必须设置/OPT:NOREF 以便 f_end 和 g_end 不会被完全跳过)并尝试优化(“”,关闭)无济于事。

谢谢

最佳答案

/OPT:NOICF可能是您正在寻找的设置。它告诉编译器不要折叠(合并)相同的 comdats。

关于c++ - 防止 Visual Studio C++ 合并相同的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17013727/

相关文章:

c++ - C++中匿名命名空间和匿名范围有什么区别?

c# - 在构建过程中什么优先? nuget 引用或项目引用

c++ - 您的计算机错误中缺少 DLL

java - C 比 Java 慢 : why?

c++ - 使用具有生成器类型的 C++ 模板函数

c++ - 我可以在 native 代码中包含托管代码吗?

c++ - 指向数据成员的指针数组

visual-studio - 无法将现有 keystore 导入到 Visual Studio 2017

optimization - 优化 Fortran 子例程

java - 优化一个简单的搜索算法