{ codeImgUrl : '', // >= v1.1.5 左侧图片设置,不配置使用 window.cnblogsConfig.blogAvatar aboutHtml : '', // 关于博主,不配置使用默认 copyrightHtml: '', // 版权声明,不配置使用默认 supportHtml : '', // 声援博主,不配置使用默认 }

经典变长指令-SIB

 


一、回顾Mod/M结构

Intel 64 and IA-32 Architectures Instruction Format
image
SIB由ModR/M来决定,同时Displacement(偏移)和Immediate(立即数)也是由ModR/M来决定

二、SIB的组成部分(结构图)

image
image

三、示例

88 84 48

1、88-->是Opcode,查Table A-2表-->得出操作指令是MOV
2、88的具体含义为-->MOV Eb,Gb
image
3、见到 Eb,Gb明白84为ModR/M字段
4、接下来来拆分ModR/M-->10 000 100 (按照ModR/M结构图来进行查询(可看上一篇文章)
5、接下来查表Table2-2
image
6、发现得到的与之前有所不同,当遇到[--][--]这种情况仅依靠ModR/M无法来确定,需要继续查询SIB
7、此时为通过ModR/M确定成-->[--][--]+disp32,接下来通过中间的000位确定Gb,因为此时的宽度为b所以是8个字节,所以为AL
image
8、通过以上确定了48为SIB的结构(组成部分和格式可看第二部分) 将48拆分-->01 001 000,然后查表Table 2-3-->Base为EAX,Index为ECX*2
image
9、最后补全-->MOV BYTE PTR DS:[EAX + ECX*2 +disp32],AL disp32是偏移的值而且宽度为32,就说明,在使用的时候后面会被吃进去4个字节
image


__EOF__

本文作者Mkd1R
本文链接https://www.cnblogs.com/Mkd1R/p/15772802.html
关于博主:安全小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Mkd1R  阅读(125)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示