gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:15:34 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com