BNDSTX

使用地址翻译存储扩展框

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
NP 0F 1B /rBNDSTX mib, bndMR有效有效在 bnd 中将边框和指针值存储在 mib 的索引寄存器中,以使用 mib 的基数进行地址翻译为约束表条目(BTE).

操作数编码

每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。

MR

  1. SIB.base (r): Address of pointer
  2. modrm.reg lecturaModRM 字节的 reg 字段(第 5-3 位)

实测开销

正在从 arch-data 加载实测数据...

说明

BNDSTX使用SIB-地址表的移动和基登记册中构建的内存操作数(mib)的线性地址来进行地址翻译以存储到绑定表条目. 源操作数 bnd中的界限写到BTE的下界和上界. Mib的索引寄存器的内容写入BTE的指针值字段.

此指令不导致内存访问 mib 的线性地址, 也不导致基准引用的有效地址, 也不读写任何旗帜 。

分块覆盖适用于线性地址计算与 mib 基数,并在地址翻译时用于生成绑定表条目的地址. 默认情况下,BTE的地址被假定为线性地址. 在MIB的基座上没有进行分区检查.

MIB的底部不会被检查为犬类地址违规,因为它不能访问内存.

本指令的任何编码如果不指定基数或索引登记册,这些登记册将被视作零(恒定). 本指令的reg-reg形式仍为NOP.

SIB字节的缩放字段对这些指令没有影响,因此被忽略.

绑定寄存器可能在内存断层上部分更新. 内存操作数的加载顺序是具体的执行顺序.

行动

base := mib.SIB.base ? mib.SIB.base + Disp: 0;
ptr_value := mib.SIB.index ? mib.SIB.index : 0;

Outside 64-bit Mode
A_BDE[31:0] := (Zero_extend32(base[31:12] << 2) + (BNDCFG[31:12] <<12 );
A_BT[31:0] := LoadFrom(A_BDE);
IF A_BT[0] equal 0 Then

    BNDSTATUS := A_BDE | 02H;
    #BR;
FI;
A_DEST[31:0] := (Zero_extend32(base[11:2] << 4) + (A_BT[31:2] << 2 ); // address of Bound table entry
A_DEST[8][31:0] := ptr_value;
A_DEST[0][31:0] := BND.LB;
A_DEST[4][31:0] := BND.UB;


In 64-bit Mode
A_BDE[63:0] := (Zero_extend64(base[47+MAWA:20] << 3) + (BNDCFG[63:12] <<12 );1
A_BT[63:0] := LoadFrom(A_BDE);
IF A_BT[0] equal 0 Then

    BNDSTATUS := A_BDE | 02H;
    #BR;
FI;
A_DEST[63:0] := (Zero_extend64(base[19:3] << 5) + (A_BT[63:3] << 3 ); // address of Bound table entry
A_DEST[16][63:0] := ptr_value;
A_DEST[0][63:0] := BND.LB;
A_DEST[8][63:0] := BND.UB;

Intel C/C++ 内在编译器

BNDSTX: _bnd_store_ptr_bounds(const void **ptr_addr, const void *ptr_val);

受影响的旗帜

None.

异常

保护模式
#BR如果绑定目录条目无效 。
#UD如果使用 LOCK 前缀 。 如果启用 Intel MPX 时, ModRM.r/ m 编码 BND4- BND7 。 如果使用 67H 前缀和 CS.D=0. 如果使用 67H 前缀和 CS.D=1.
#GP(0)如果 Bound Table 条目的目的地有效地址在 DS 段限制之外。如果 DS 寄存器包含 NULL 段选择子。如果 目标操作数 指向一个不可写入的段 #PF(fault code) 如果 页面错误 发生的话。
实地址模式
#UD如果使用 LOCK 前缀。 如果启用 Intel MPX 时, ModRM.r/ m 编码 BND4- BND7 。 如果使用 16 位地址 。
#GP(0)如果 Bunde Table 条目的目的地有效地址在 DS 段限制之外。
虚拟 8086 模式
#UD如果使用 LOCK 前缀。 如果启用 Intel MPX 时, ModRM.r/ m 编码 BND4- BND7 。 如果使用 16 位地址 。
#GP(0)如果 Bound Table 条目的目的地有效地址在 DS 段限制之外. #PF(fault code) 如果 页面错误 发生.
兼容模式
与保护模式中的例外相同.
64 位模式
#BR如果绑定目录条目无效 。
#UD如果 ModRM 是 RIP 相对。 如果使用 LOCK 前缀 。 如果启用 Intel MPX 时, ModRM.r/ m 和 REX 编码为 BND4- BND15 。
#GP(0)如果内存地址(A BDE或A BTE)是非冠状的。如果 目标操作数 指向不可写入的片段 #PF(fault code) 如果 页面错误 发生。

来源