【问题标题】:How does the NX flag work?NX 标志如何工作?
【发布时间】:2010-01-30 16:29:57
【问题描述】:

您能否解释一下 NX 标志是什么以及它是如何工作的(请提供技术支持)?

【问题讨论】:

  • +1 来自我..有趣的问题。

标签: computer-architecture


【解决方案1】:

它在虚拟内存系统和 TLB(CPU 用于解析虚拟内存映射的结构)中标记内存页面不可执行。如果要从该页面执行任何程序代码,CPU 将发生故障并将控制权移交给操作系统进行错误处理。

程序通常将其二进制代码和静态数据保存在只读内存部分中,如果它们试图在那里写入,CPU 将出现故障,然后操作系统通常会终止应用程序(这称为分段错误或访问冲突)。

出于安全原因,程序的读/写数据存储器通常默认受 NX 保护。这可以防止攻击者向某些应用程序提供他的恶意代码作为数据,使应用程序将其写入其数据区域,然后以某种方式执行该代码,通常是通过应用程序中的缓冲区溢出/下溢漏洞,覆盖函数的返回地址在堆栈中与恶意代码在数据区的位置。

一些合法的应用程序(尤其是高性能仿真器和 JIT 编译器)也需要执行它们的数据,因为它们在运行时编译代码,但它们专门分配内存而没有为此设置 NX 标志。

【讨论】:

  • 为什么需要它?你能写一个简单的代码来展示它吗?
  • 添加了更多信息。编写示例代码很困难,因为它高度依赖于平台。
  • @Tronic 你能解释一下这与有效-无效位有何不同吗?当你已经有一个有效-无效位时,为什么 NX 位不是多余的?
【解决方案2】:

来自Wikipedia

NX 位,代表否 eXecute,是一种用于 CPU 的技术 分隔内存区域以供使用 通过处理器的任一存储 指令(或代码)或存储 数据,通常只发现的特征 在哈佛架构处理器中。 然而,NX 位正在 越来越多地用于传统的冯 Neumann 架构处理器,用于 安全原因。

一个支持的操作系统 NX 位可能会标记某些区域 内存为不可执行。这 然后处理器将拒绝执行 驻留在这些领域的任何代码 记忆。一般技术,已知 作为可执行空间保护,是 用于防止某些类型的 恶意软件从接管 通过将代码插入计算机 另一个程序的数据存储区 并从内部运行自己的代码 本节;这被称为 缓冲区溢出攻击。

【讨论】:

  • 这不是Windows使用DEP标志的功能,取决于处理器的类型吗?
  • 我想要一个更具技术性的答案,希望有一些实际的 NX 位实例。我真的不需要它,我只是要求添加一些关于 SO 的知识(对我来说,我也没有玩过它,虽然我知道它是关于什么的)
【解决方案3】:

查看使用 NX 位的维基百科上的“DEP”。至于提供技术答案,对不起,我对此知之甚少,只能引用:

数据执行保护 (DEP) 是现代中包含的一项安全功能 Microsoft Windows 操作系统,旨在防止 应用程序或服务从不可执行的内存区域执行代码。 ....

DEP 是在 Windows XP Service Pack 2 中引入的,并且包含在 Windows XP 中 Tablet PC Edition 2005、Windows Server 2003 Service Pack 1 及更高版本、Windows Vista 和 Windows Server 2008 以及所有较新版本的 Windows。 ...

硬件强制 DEP 在兼容 CPU 上启用 NX 位,通过 在 32 位 Windows 中自动使用 PAE 内核并在 64 位上提供本机支持 内核。 Windows Vista DEP 通过将内存的某些部分标记为打算 仅保存数据,然后启用 NX 或 XD 位的处理器将其理解为 不可执行。 这有助于防止缓冲区溢出攻击得逞。在 Windows Vista 中, 进程的 DEP 状态,即是否为某个进程启用或禁用了 DEP 可以在 Windows 任务的进程选项卡上查看特定进程 经理。

另请参阅 MSDN 关于 DEP 的知识库中的 here。有一个非常详细的解释 here 这是如何工作的。

希望这会有所帮助, 最好的祝福, 汤姆。

【讨论】:

    猜你喜欢
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2022-08-14
    • 2021-05-13
    • 2021-03-10
    • 2022-08-13
    • 2023-02-05
    相关资源
    最近更新 更多