据我所知,32位Delphi桌面应用程序无法通过Can a desktop Delphi application be certified for Windows 8
缺少SafeSEH而无法通过Windows 8.1认证但 64位Delphi桌面应用程序怎么样?他们能否通过其他要求,因为他们不必满足SafeSEH的要求?
如果答案是肯定的,那么是否需要将任何编译器/链接器设置设置为特定值,以及所需的最小Delphi版本(显然至少为XE2)。
我特别考虑了认证要求的第3部分。
第3。应用支持Windows安全功能
Windows操作系统具有许多支持系统安全性和隐私的功能。应用必须支持这些功能才能保持操作系统的完整性。编译不当的应用程序可能会导致缓冲区溢出,从而导致拒绝服务或允许恶意代码执行。
3.1。您的应用不得使用AllowPartiallyTrustedCallersAttribute(APTCA)来确保对具有强名称的程序集的安全访问
3.2您的应用必须使用/ SafeSEH标志进行编译,以确保安全的异常处理(仅限32位)
3.3您的应用必须使用/ NXCOMPAT标志进行编译,以防止数据执行
3.4您的应用必须使用/ DYNAMICBASE标志进行编译以进行地址空间布局随机化(ASLR)
3.5您的应用不得读取/写入共享PE部分
答案 0 :(得分:6)
唯一难以满足Delphi的要求是/SafeSEH
。但这不适用于64位应用程序。
Windows x64 ABI使用与x86使用的完全不同的异常模型。
x86异常模型基于堆栈。 /SafeSEH
标志适用于基于堆栈的异常。 x64 ABI使用基于表的异常。而/SafeSEH
根本不适用。这解释了您引用的仅32位文本。
因此很容易满足3.1和3.5。别做那些事。 3.3和3.4只是您可以使用{$SetPEFlags}
设置的PE标志。然后3.2不适用,你回家了。