4

据我所知,由于缺少 SafeSEH,32 位 Delphi 桌面应用程序无法通过Windows 8 认证桌面 Delphi 应用程序是否可以通过 Windows 8 认证

但是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 部分

4

1 回答 1

6

Delphi 唯一难以满足的要求是/SafeSEH. 但这不适用于 64 位应用程序。

Windows x64 ABI 使用与 x86 使用的完全不同的异常模型。

x86 异常模型是基于堆栈的。该/SafeSEH标志适用于基于堆栈的异常。x64 ABI 使用基于表的异常。而且/SafeSEH根本不适用。这解释了您引用的仅 32 位文本。

所以很容易满足3.1和3.5。不要做那些事。而 3.3 和 3.4 只是您可以使用设置的 PE 标志{$SetPEFlags}。然后 3.2 不适用,您在家。

于 2014-12-20T20:23:05.350 回答