为了获得函数的长度,我使用空函数来标记每个函数的结束位置,如下所示:
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/