在 Windows 中,可以__asm nop
被交换为asm volatile("nop");
(在 GCC 编译器中使用)并产生相同的结果?
我读过volatile()
(在 GCC 中)保证调用不会被优化掉。然而,它不能直接移植到 Windows,我很好奇它是否可以简单地删除或者是否需要用类似的结构替换。
The __asm
MSVC 中关键字的实现非常简单。它始终发出未更改的机器代码,并且优化器不会触及它。它也不对 __asm 之后的机器状态做出任何假设,这有击败其他优化的技巧。
所以,不,没有什么类似的volatile()
是必须的,不能消失。清楚的__asm { nop }
永远会安然无恙,相当于GCC大会。
请记住,内联汇编并不是一个好的长期策略,对它的支持在 x64 编译器中已被完全删除,并且不太可能回来。您必须退回到以汇编语言编写并使用 ml64.exe 等程序进行编译的内在函数或链接代码。这确实击败了 NOP 注入,但是优化器已经很好地处理了代码对齐,并且不需要帮助。这也是您可能根本不应该这样做的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)