【问题标题】:Does a 32 bit application running on 64 bit Windows still need to be compiled with SAFESEH?在 64 位 Windows 上运行的 32 位应用程序是否仍需要使用 SAFESEH 编译?
【发布时间】:2019-06-09 00:01:33
【问题描述】:

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

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

【问题讨论】:

标签: c++ windows 64-bit


【解决方案1】:

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 文件添加一个处理程序表,该文件的使用方式与在 32 位版本的 Windows 上完全相同。 SAFESEH 是编译器+操作系统功能(WinXP.SP2?),它的 Windows 部分位于 NTDLL 中,而不是内核中。如果缺少操作系统组件(旧的 Windows 版本),它将像正常的 SEH 一样工作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多