- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 boost::asio::spawn
函数,就像在 example 中一样,但它在 Release 中给我以下错误:
libboost_context-vc120-mt-s-1_55.lib(jump_i386_ms_pe_masm.obj) : error LNK2026: module unsafe for SAFESEH image
很明显,我应该在项目设置中设置 /SAFESEH:NO
选项,但我不明白这实际上会做什么。这如何影响程序中异常处理的行为(C++ 异常和 SEH)?
顺便说一句,我正在使用 MSVC-12.0。
最佳答案
简短回答:禁用 SafeSEH 会降低您的程序安全性。
详情:SafeSEH是编译器保护。
在 Windows 环境中 SEH(结构化 Exception Handler)记录布局如下
Stack data (pointed by TEB - thread environment block)
|
| I) Pointer to next SEH record II
| EH pointer
|
| II) Pointer to next SEH record III
| EH pointer
|
| 0xFFFFFF
| default EH (MSVCRT)
通常基于 SEH 的攻击依赖于覆盖上述记录之一并让应用程序抛出异常:这将绕过控制流到您的代码(我没有考虑 DEP/ASLR 保护系统在这里,所以我假设一个已知的 +X 位置)。更准确地说,他们经常“模拟 EH 返回”,并获取下一个“恶意制作”的指针以跳转到 shellcode。
SafeSEH 的工作原理是指示操作系统在跳转到它们之前首先检查处理程序指针的有效性(对照已知有效 EH 的表)。此过程有一些限制,在特殊情况下,应用程序可能仍然容易受到攻击,但不太可能发生基于 SEH 的攻击(或更难制作)。
当针对非 safeSEH 编译模块进行链接时,链接器将无法生成 EH 位置的“可信表”(它根本无法判断这些 EH 的位置和是否有效),因此会出现错误。
Windows 操作系统工程的一些后勤限制、兼容性原因以及控制地址超出加载模块(和可执行镜像)范围的问题导致选择默认禁用此选项并让用户选择是否启用。
如果您的应用程序迫切需要安全性并且您将上述情况视为潜在威胁,则您应该启用它并重新编译您的模块以便使用它。
关于c++ - 什么 SAFESEH :NO option actually do,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25081033/
我经常发现自己想要编写以下形式的通用类定义 public class Foo> 例如在这样的设置中: public interface ChangeHandler { public void
我有一些对象被放入队列中。队列中的所有对象都实现相同的基接口(interface),这也要求它们实现 IEquatable<>。 我想验证是否以正确的顺序将正确的对象放入队列中。 当我编写一个断言 C
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我有一串数字和字符 c2 = "list of 2nd C2 H2O 1 12 123" 我需要删除所有实际数字,即 1、12、123,而不是那些属于字符集的数字,即 2nd、C2、H2O。 到目前为
git repo : django tutorial 我一直在关注上述 django 项目,该项目着眼于创建人与人之间的聊天。我遇到过这部分: def message_list(request, se
gitpod GitHub 页面说 Gitpod is an open-source Kubernetes application providing prebuilt,collaborative d
这是一个示例代码,我在这里抛出一个异常,由于某种原因,它在没有 try/catch 代码块的情况下工作得很好。 我是否必须在这个方法“EntryDelete”中处理这个问题或者我必须在调用该方法的地方
我的数据集中有以下列: id |用户 ID |开始日期 |结束日期 |检查日期 我想从第一列获取check_date,找到check_date在start_date和end_date。然后计算每个 u
简而言之: 在 pytorch 中使用 adadelta 优化器时,我无法绘制 lr/epoch 曲线,因为 optimizer.param_groups[0]['lr'] 总是返回相同的值。 详细说
假设我有以下 C 代码: int* vector = (int*)malloc(5 * sizeof(int)); malloc 返回一个空指针,因为不知道要求为什么分配空间。 因此,我们将 void
在 Java 中将形状渲染为其“实际大小”的简单方法是什么?例如,我有一个直径为 1"的 pipe ,我想在屏幕上将其描绘为 1"圆的轮廓。 Graphics2D 方法 drawOval(int x,
我阅读了很多关于 Node js 的文章,试图理解事件循环及其模式/反模式。许多作者没有提到的一件事是 Node 实际上处理线程。然而,应用程序程序员当然无法访问它们,但很高兴知道它们存在以及它们何时
什么mode:shim做? 我在这个网站上搜索了一种强制闪光的方法。代码开发人员针对遇到我所面临的确切问题的某个人的问题写了这个答案: MediaElement.js - force Chrome t
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭11 年前。 Improve th
在 C++03 中,我们有模板显式实例化定义 ( template class Foo ),它强制模板类的实例化。 在 C++11 中,我们有模板显式实例化声明 ( extern template c
我有一个相当复杂的联接的执行计划,它显示在表上执行索引查找,“实际行数”读数约为 70,000,而实际上表中总共只有约 600 行(估计行数仅为 127)。 请注意,所有统计信息都是最新的,并且查询的
我的学校作业涉及编写一个简单的网络爬虫来爬行维基百科。该作业规定我不能使用任何外部库,因此我一直在使用 java.net.URL 类。基于official tutorial以及我的教授给出的一些代码:
您好,我是集成测试新手。我的断言状态面临一些困难。 这是错误 java.lang.AssertionError: Status Expected :204 Actual :404 这是测试代码
我刚刚习惯 Subversion,并且有一个关于版本控制的基本问题。 我已在我的网络中托管的服务器“S”上创建了 SVN 存储库。假设我从网络中的另一台计算机“A”“导入”代码、文件、目录等,它会添加
我没能弄清楚 Spark SQL 连接操作实际上是如何工作的。我已阅读pretty massive explanation ,但它并没有阐明一些问题。 示例 例如,您有两个数据库表保存在 Spark
我是一名优秀的程序员,十分优秀!