intel汇编指令格式学习.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
intel汇编指令格式学习

第一节 先来看看intel文档的经典图示: 解释: 就是说,intel指令可以在长度上不同,但是都是由以上六组构成的: (1)optional instruction prefixes (in any order) (2)one or two primary opcode bytes (3)an addressing-form specifier (if required) consisting of the ModR/M byte (4)the SIB (Scale-Index-Base) byte (5)a displacement (if required) (6)an immediate data field (if required) 指令前缀,这个是可选的,可以没有,就是说可以有0,1,2,3,4个前缀,每一个前缀只占用一个字节,也就是说,最多有4个字节的前缀。着五种选择有: 。段寄存器前缀(segment):2E,36,3E,26,64,65——CS,SS,DS,ES,FS,GS 。操作数长度前缀(operand-size):可以改变操作数长度 66 。地址长度前缀(address-size):可以改变地址长度 67 。重复前缀(rep/repne):F3 F2 。总线加锁前缀(LOCK):控制处理器总线 F0 这样的五种,下面作出详细的说明: 例子: 8B00 MOV EAX,DWORD PTR DS:[EAX] 2E:8B00 MOV EAX,DWORD PTR CS:[EAX] 36:8B00 MOV EAX,DWORD PTR SS:[EAX] 可以看到默认情况下是使用了DS的 操作数前缀,允许一个程序在16/32位操作数长度之间转换,默认下市32位的,就是说,如果加前缀66H,就会转换成16位的指令: 89 C0 MOV EAX,EAX 66 89 C0 MOV AX,AX 地址长度前缀,也是和2)一样的,表示16/32位的寻址方式,在win32下编程一般是不用管的: 8B00 MOV EAX,DWORD PTR DS:[EAX]——32bit寻址模式 67:8B00 MOV EAX,DWORD PTR DS:[BX+SI]——16bit寻址模式 重复前缀,将会重复操作字符串的每一个元素。 只有MOVS,CMPS,SCAS,LODS,STOS,INS,OUTS等字符串操作或I/O指令才能使用这些前缀,举例子: AD LODS DWORD PTR DS:[ESI] F3 AD REP LODS DWORD PTR DS:[ESI] F2 AD REPNE LODS DWORD PTR DS:[ESI] 。总线加锁,这一部分目前还没有涉及,但是如果想知道intel的所有秘密来反汇编,就需要仔细的了解了,还有病毒什么的。。。。(不明) 总之,prefix主要起了三个作用:调整、加强、附加,要彻底了解x86 prefix,必须清楚了解3个很重要的上下文环境:缺省operand-size和缺省 addess-size环境,编译器上下文环境以及当前执行上下文环境。 操作码,opcode就是这儿了,这个就是解码的关键部分了,从字长上分为: 首先是1字节操作码: 然后是双字节操作码: 最后是三字节操作码: 之所以说这儿是核心,是因为Opcode、ModRM以及SIB,这三者的已经是紧密结合,无论分开谁单独来讲都不能透切的了解x86的指令编码体系,这三部分就是对于一般看见的诸如: MOV EAX,ECX 这样的汇编代码进行恢复的关键要素了!通过查找相对应的表,再对这三个部分综合分析,就可以从机器码中得到确切的汇编代码了。 这个部分有四个表格: One-byte Opcode Map: (00H — FFH) Two-byte Opcode Map: 00H — FFH (First Byte is 0FH) Three-byte Opcode Map: 00H — FFH (First Two Bytes are 0F 38H) Three-byte Opcode Map: 00H — FFH (First two Bytes are 0F 3AH) 但是三字节的表格还没有填满,说明intel以后还会有新的指令添加,而且一般而言三字节指令也是基本不会涉及的。 还需要注意的有,标记有1A上标的指令需要把ModR/M中的第3,4,5位作为opcode extension使用,在查表的时候需要仔细的注意了,同时也说明了Opcode、ModRM以及SIB这三个部分紧密的联系! (再有就是opcode表的分组了,现在还是不是很清楚这个作用!第三节中会详细的讲解。) ModR/M,这个是告诉处理器哪一个寄存器或者

文档评论(0)

almm118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档