You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在支持MPX的Intel CPU上启用MPX扩展及排查指令无效问题

问题

我正在支持MPX的Intel® Celeron® Processor N4120处理器上测试Intel MPX指令,编写了如下汇编程序,但MPX指令似乎无作用(类似NO OP)。程序未生成预期异常,bound2值也未按预期改变,怀疑MPX已存在但被禁用。我使用Windows 11系统,通过VS2022命令提示符的ml选项调用MASM汇编器,请问如何启用MPX指令?

测试代码

.data

bound1 dq 07fffffffffffffffh
bound2 dq 1111111111111111h

.code one

main:
xor    ecx, ecx
bndmov bnd1, qword ptr ds:[bound1]     ; bnd1 = bound1
bndmov bnd2, bnd1                      ; bnd2 = bnd1
bndmov qword ptr ds:[bound2], bnd2     ; bound2 will change to FFFFFFFFFFFFFFFh?
bndcl  bnd1, ecx                       ; generate exception if ecx< bnd1

main endp
end

启用MPX指令的步骤

  • 开启BIOS/UEFI的MPX支持:重启电脑进入BIOS/UEFI设置界面,找到「Intel Memory Protection Extensions」(或简称MPX)选项,将其设为启用状态。该选项通常在「Security」或「高级CPU配置」分类下。
  • 汇编时指定MPX指令集支持:调用MASM汇编器时,必须添加宏定义启用MPX,同时指定兼容的指令集架构。如果是32位程序,使用以下命令:
    ml /c /coff /arch:AVX2 /d_MPX your_program.asm
    
    如果是64位程序,需改用ml64(VS2022自带的64位汇编器),命令为:
    ml64 /c /d_MPX your_program.asm
    
  • 链接生成可执行文件:链接阶段需确保目标程序类型正确,以控制台程序为例,使用以下命令:
    link /subsystem:console your_program.obj kernel32.lib
    
  • 验证MPX生效状态:
    1. 可通过CPUID指令检测硬件MPX支持:读取CPUID leaf 0x07、sub-leaf 0x00的EBX寄存器第14位,若为1则硬件支持MPX。
    2. 使用WinDbg等调试器运行程序,查看BND寄存器的数值变化,确认bndmov指令是否正常执行;同时检查bndcl指令触发异常的情况。

内容的提问来源于stack exchange,提问作者Theodoros Mpalis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 10:56:01