delphi - 在 C++ Builder 中启用安全异常处理

标签 delphi windows-8 c++builder seh aslr

对于 Windows 8 应用程序认证,有(除其他外)以下要求:

  • 3.2 您的应用必须使用 /SafeSEH 标志进行编译,以确保安全的异常处理
  • 3.3 您的应用必须使用 /NXCOMPAT 标志进行编译,以防止数据执行
  • 3.4 您的应用必须使用 /DYNAMICBASE 标志进行编译,以实现地址空间布局随机化 (ASLR)

我无法找到如何在 C++Builder XE 中启用其中任何一个。

对于 /NXCOMPAT/DYNAMICBASE,可以使用 VS 中的 editbin.exepeflags.exe来自西格温。不过,如果有本地方法来启用这些副作用,我会对可能的副作用更有信心。

无论如何,我对 /SafeSEH 完全不知所措。

最佳答案

首先,/SafeSEH 仅适用于 x86,不适用于 x64 或 ARM。它要求您的编译器生成附加表,指示出于安全原因被视为有效异常处理程序的函数地址。您自己执行此操作的可能性很小,但这需要您查看已编译的汇编代码中的 fs:0 异常处理链,并枚举曾经推送到该链上的所有地址,然后按此处记录的方式描述它们:http://msdn.microsoft.com/en-us/library/9a89h429(v=VS.80).aspx 。您的代码实际上没有任何处理程序的可能性很小,并且它们都在 C++Builder 的运行时中(如果运行时是单独的 DLL,可能会更容易)。

您应该尝试说服 C++Builder 更新其编译器以支持 SafeSEH。自 XP SP2 以来,它就出现在 Windows 平台上,并堵塞了一个相当令人讨厌的安全漏洞(异常处理程序地址存在于 x86 的堆栈中,只是等待缓冲区溢出将任何随机地址放在那里执行)

关于delphi - 在 C++ Builder 中启用安全异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11196471/

相关文章:

delphi - 在 firemonkey 移动开发中正确使用 TAniIndicator 等待处理

delphi - 在监听套接字上接受监听套接字上的连接(并且不再监听)?

delphi - 在delphi中添加新的word文档

c# - Windows RT 和 C#

c++ - 为所有游标 ID 设置系统范围内的自定义游标

delphi - 如何阻止Delphi 11 "Close All"关闭IDE欢迎屏幕

windows - 将 x86/64 Windows 程序移植到 Windows 8 ARM

javascript - 如何使 Windows 应用商店应用程序非全屏?

c++ - 如何使用 TinyXML 保存对 XML 文件的更改?

c++ - Borland BCB5 TInifile 使用 Readstring() 忽略引号?