编译器:VC++ 2013模式:发布
故事:我了解到IAT挂钩.我决定在ExitProcess()上练习.一旦替换函数返回,我就崩溃了.为什么?因为不知何故,编译器决定认为ExitProcess()之后的内容永远不会执行,因此不会生成代码.例如,当我将ExitProcess()放在if语句中时,一切都很顺利.那么这是一个有效的优化呢?ExitProcess()在DLL中,因此如果需要,编译器甚至无法进行任何链接时优化.它只是神奇地假设ExitProcess()永远不会返回.
我认为编译器不应该做这样的事情.
ExitProcess由文档定义为永不返回.如果你写了一个确实返回的替换函数,那就是你违背了文档所做的承诺,结果是任何破坏都是你的问题.
C++ 11标准化了这些函数的概念并对它们有一个符号.我相信VS并没有实现这一点,但没有什么能阻止他们为特定功能实现它.
为什么编译器不应该假设ExitProcess()不返回?退出流程的定义非常明确.
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |