在64位版本的Windows上以WOW64运行的32位应用程序是否仍然受益于带有SAFESEH标志的编译?
我知道这与64位应用程序无关,但是我不确定上述情况下的32位应用程序,并且在谷歌搜索时无法找到答案。
答案 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上运行您的应用程序。