【发布时间】:2017-08-20 19:30:54
【问题描述】:
我正在对 CRT 库(尤其是 SEH 序言)进行一些反汇编时,突然遇到了这条奇怪的指令 bnd ret。谁能解释一下c3(ret opcode)之前的f2前缀的含义?
【问题讨论】:
-
@fuz 这就是我的想法,但是 REPNE RET (F2 C3) 用于英特尔的 MPX 扩展,而通常是 REP RET (F3 C3) 用于填充 RET 指令以避免分支预测旧 AMD CPU 上的问题。
-
@Ross 这是有道理的。但我不明白前缀如何避免分支错误预测。
-
@fuz 好吧,原始发帖人显然同意你的观点,即它是重复的,这就是社区投票关闭的来源。
-
我认为这个答案关闭得太快了。
bnd与rep不同。bnd用于启用 MPX 的代码以确保检查分支(和返回)。由于如果不支持 MPX 则无操作,因此始终将其添加到库函数中可以避免发布两个库版本(带和不带 MPX)。 -
我还在
__chkstk实现中看到了bnd jae(操作码f2 73)。
标签: assembly x86 return disassembly opcode