x86中BND RET的含义

时间:2017-03-27 22:25:47

标签: assembly x86 return disassembly opcode

当我突然遇到这个奇怪的指令bnd ret时,我正在经历一些CRT库(特别是SEH序言)的反汇编。任何人都可以在f2(ret操作码)之前解释c3前缀的含义吗?

1 个答案:

答案 0 :(得分:3)

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

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

请注意,BND前缀的编码与REPNE前缀的编码相同(均为F2),因此不了解MPX的较旧的反汇编程序可能将此指令序列显示为REPNE RET(或REPNE JMP, REPNE CALL等)。这种用法与REP RET idiom无关,后者假定前缀具有无操作行为,并且仅用于解决旧CPU上的性能问题。