我在这里读到
/SAFESEH 仅在链接 x86 目标时有效。/SAFESEH 不支持已注明异常处理程序的平台。例如,在 x64 和 Itanium 上,所有异常处理程序都在 PDATA 中注明。
这是什么意思?是否使用 x64 目标检查 SEH 链(存储到 PDATA 结构中)?还是没有针对 x64 目标的 safeSEH 检查?
我在这里读到
/SAFESEH 仅在链接 x86 目标时有效。/SAFESEH 不支持已注明异常处理程序的平台。例如,在 x64 和 Itanium 上,所有异常处理程序都在 PDATA 中注明。
这是什么意思?是否使用 x64 目标检查 SEH 链(存储到 PDATA 结构中)?还是没有针对 x64 目标的 safeSEH 检查?
SafeSEH 是一种保护基于堆栈的异常处理程序链不被覆盖的机制。但是,在 x64 和 Itanium 体系结构上,异常处理程序是基于表的(即存储在 PDATA 中),因此不能被堆栈缓冲区溢出直接覆盖 - 它们根本不在堆栈上。因此,SafeSEH 与这些系统无关。