bnd指令

bnd指令bnd0 bnd3 寄存器的存取使用如下指令 BNDMOV 或 BNDSTX

在逆向__alloca_probe函数时,发现有这么几条带bnd前缀的指令:

.text:00 __alloca_probe proc near ; CODE XREF: sub_40C590+8↑p .text:00 ; sub_40EF60+8↑p .text:00 51 push ecx .text:00 8D 4C 24 04 lea ecx, [esp+4] .text:00 2B C8 sub ecx, eax .text:00 1B C0 sbb eax, eax .text:00 F7 D0 not eax .text:0041327B 23 C8 and ecx, eax .text:0041327D 8B C4 mov eax, esp .text:0041327F 25 00 F0 FF FF and eax, 0FFFFF000h .text:00 .text:00 unknown_libname_3: ; CODE XREF: __alloca_probe+2B↓j .text:00 3B C8 cmp ecx, eax ; Microsoft VisualC 14/net runtime .text:00 F2 72 0B bnd jb short unknown_libname_4 ; Microsoft VisualC 14/net runtime .text:00 8B C1 mov eax, ecx .text:0041328B 59 pop ecx .text:0041328C 94 xchg eax, esp .text:0041328D 8B 00 mov eax, [eax] .text:0041328F 89 04 24 mov [esp+0], eax 

百度了一下,发现bnd指令的如下解释:

bnd是Intel MPX( Memory Protection Extensions,内存保护扩展)的一部分。 BND 表示返回目标(或通常是分支目标,因为 BND 可应用于任何控制流指令) 应根据 BND0 到 BND3 寄存器中指定的边界进行检查, 否则将产生异常——表明潜在的堆栈溢出、编程错误或恶意代码攻击。 在不支持 Intel MPX 的处理器上,或者当 MPX 被禁用时, BND 前缀表现为无操作。注意 BND 前缀的编码和 REPNE 前缀的编码是一样的(都是 F2), 所以不知道 MPX 的老反汇编器可能会将此指令序列显示为 REPNE RET(或 REPNE JMP, REPNE CALL 等)。 

bnd0-bnd3寄存器的存取使用如下指令:BNDMOV或BNDSTX

今天的文章 bnd指令分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-15 22:21
下一篇 2024-12-15 22:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/86859.html