运行在64位Windows上的32位应用程序是否仍需要使用SAFESEH进行编译?

时间:2019-06-09 00:01:33

标签: c++ windows 64-bit

在64位版本的Windows上以WOW64运行的32位应用程序是否仍然受益于带有SAFESEH标志的编译?

我知道这与64位应用程序无关,但是我不确定上述情况下的32位应用程序,并且在谷歌搜索时无法找到答案。

1 个答案:

答案 0 :(得分:0)

TL; DR:是的。

  

/ SAFESEH仅在链接x86目标时有效。 /SAFESEH is not supported for platforms that already have the exception handlers noted。例如,在x64和ARM上,所有异常处理程序都在PDATA中注明

即使在WOW64下运行,32位x86应用程序仍将使用FS寄存器来存储SEH链,并且所有正常的安全问题均适用。 / SAFESEH将在PE文件中添加一个处理程序表,该表的使用方式与Windows 32位版本上的使用方式完全相同。 SAFESEH是一种编译器+操作系统功能(WinXP.SP2?),它的Windows部分位于NTDLL中,而不是内核中。如果缺少OS组件(较旧的Windows版本),它将像普通的SEH一样起作用。

您还可以用另一种方式考虑:您不提前知道用户是否要在32位或64位版本的Windows上运行您的应用程序。