对于
Windows 8应用程序认证,有(以及其他)这些要求:
> 3.2您的应用程序必须使用/ SafeSEH标志进行编译,以确保安全的异常处理
> 3.3您的应用程序必须使用/ NXCOMPAT标志进行编译,以防止数据执行
> 3.4您的应用程序必须使用/ DYNAMICBASE标志进行编译,用于地址空间布局随机化(ASLR)
我不知道如何在C Builder XE中启用其中的任何一个.
对于/ NXCOMPAT和/ DYNAMICBASE,可以使用VS中的editbin.exe或来自Cygwin的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中的堆栈中存在异常处理程序地址,只是等待缓冲区溢出将任何随机地址放在那里执行)