bnd指令

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

.text:00413270                         __alloca_probe  proc near               ; CODE XREF: sub_40C590+8↑p
.text:00413270                                                                 ; sub_40EF60+8↑p
.text:00413270 51                                      push    ecx
.text:00413271 8D 4C 24 04                             lea     ecx, [esp+4]
.text:00413275 2B C8                                   sub     ecx, eax
.text:00413277 1B C0                                   sbb     eax, eax
.text:00413279 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:00413284
.text:00413284                         unknown_libname_3:                      ; CODE XREF: __alloca_probe+2B↓j
.text:00413284 3B C8                                   cmp     ecx, eax        ; Microsoft VisualC 14/net runtime
.text:00413286 F2 72 0B                                bnd jb short unknown_libname_4 ; Microsoft VisualC 14/net runtime
.text:00413289 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指令的关系,参考如下链接:
https://xem.github.io/minix86/manual/intel-x86-and-64-manual-vol1/o_7281d5ea06a5b67a-398.html

关于mpx的参考链接:
https://intel-mpx.github.io/design/

关于bnd的论文:
https://security.csl.toronto.edu/papers/whuang_lmp_acsac2016.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值