对于 Windows 8 应用程序认证,有(除其他外)以下要求:
- 3.2 您的应用必须使用
/SafeSEH
标志进行编译,以确保安全的异常处理 - 3.3 您的应用必须使用
/NXCOMPAT
标志进行编译,以防止数据执行 - 3.4 您的应用必须使用
/DYNAMICBASE
标志进行编译,以实现地址空间布局随机化 (ASLR)
我无法找到如何在 C++Builder XE 中启用其中任何一个。
对于 /NXCOMPAT
和 /DYNAMICBASE
,可以使用 VS 中的 editbin.exe
或 peflags.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/