Intel base instruction -- bnd

       在反编译x86 64位 pstree 时发现 f2 e9 e1 ff ff ff        bnd jmpq 2020 ,第一次见 bnd 这条指令,查intel手册,只有BNDCL、BNDMK等指令的解释,没有bnd的任何说明,只好求助于网络。还真看到有关此指令的说明,它是Intel MPX的一部分。

 

       什么是MPX?

       Memory Protection Extensions,内存保护扩展。

       BND 是Intel MPX 的一部分,表示返回目标(或通常是分支目标,因为 BND 可应用于任何控制流指令)应根据 BND0 到 BND3 寄存器中指定的边界进行检查,否则将产生异常——表明潜在的堆栈溢出、编程错误或恶意代码攻击。

       在不支持 Intel MPX 的处理器上,或者当 MPX 被禁用时,BND 前缀表现为无操作,因此无需编译两个版本的代码(一个带有 BND 前缀,一个不带 BND 前缀)。

       注意 BND 前缀的编码和 REPNE 前缀的编码是一样的(都是 F2),所以不知道 MPX 的老反汇编器可能会将此指令序列显示为 REPNE RET(或 REPNE JMP, REPNE CALL 等)。这种用法与 REP RET idiom 无关,后者假定前缀具有无操作行为,纯粹用于解决旧 CPU 上的性能问题。

你可能感兴趣的:(Assembly,linux)