【2021.01.09】经典变长指令-SIB

有没有SIB是由ModR/M决定的。

SIB结构

例如:88 84 48,查表并拆分可得:

88:是Opcode,所以查TableA-2表,得:MOV Eb, Gb。

84:拆成二进制可得:10 000 100,查Table2-2表。MOD是10,RM是100,发现是:[--][--]+disp32。如果遇到这种格式,说明当前指令通过ModR/M没有办法确定,必须要再用ModR/M后面再跟一个字节,这个字节就是SIB。Gb通过中间的000来确定,如果当前宽度是4字节就是EAX,8字节是AL。当前宽度是b,8字节,所以是AL。变成了:MOV [--][--]+disp32, AL。

由于有SIB,所以继续向后拆48。

48:拆成二进制可得:01 001 000,查Table2-3表。Base查表得:EAX,然后通过Scale和Index查表得:[ECX * 2]。

最终可得:MOV [EAX + ECX * 2 + disp32], AL、MOV BYTE PTR DS:[EAX + ECX * 2 + disp32], AL

发现还有一部分没有确定:disp32,当我们使用这个硬编码时它一定会补充4个字节,放到disp32的位置:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值