汇编指令之opcode快速入门

汇编指令之opcode快速入门

ID:5393640

大小:192.97 KB

页数:6页

时间:2017-12-08

汇编指令之opcode快速入门_第1页
汇编指令之opcode快速入门_第2页
汇编指令之opcode快速入门_第3页
汇编指令之opcode快速入门_第4页
汇编指令之opcode快速入门_第5页
资源描述:

《汇编指令之opcode快速入门》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、汇编指令之OpCode快速入门:最近一直被一些初学者问及有关于汇编指令的长度问题,因此为此专门撰写本文,以求为不知OpCode为何物,或者正为汇编长短不一的指令而烦恼的朋友一个最为快速的指引。其实,OpCode并不复杂,在本文中我不打算细致入微的告诉大家OpCode的原理,不会为大家带来一大堆有关于什么是定长指令、什么是变长指令的理论知识,更不会带着各位读者玩OpCodeHacking,我只会告诉你“怎么了”、“为什么”以及“如何解决”。1、我的汇编指令怎么了?哦,天啊!怎么我今天突然发现汇编指令竟然是长短不一的!你还没发现吗?那么请过目:1E831

2、880000CALL00430B862E917FEFFFFJMP0042817138B442404MOVEAX,DWORDPTRSS:[ESP+4]485C0TESTEAX,EAX556PUSHESI68BF1MOVESI,ECX我们可以看见“CALL00430B86”这条汇编指令竟然占用了5个字节,而“PUSHESI”则只占用了1个字节,汇编指令的脾气犹如一只滑头的猴子一样让你摸不到头脑,它很明显的告诉了你“嘿!兄弟,你别想搞懂我!”你也许会感到很郁闷,但是我并不这么想,因为如果我要想自己搞一个反汇编引擎,或者是我要在我的壳里加上代码混淆功能……嗯

3、,算了,就算是我想娱乐一下搞搞免杀吧,那么我终归是要搞懂它的,为什么?因为如果搞懂它的话,那么我就没办法做到这些!很明显我们的汇编指令继承了Intel工程师的狡猾本质,为了尽可能的减少体积,所以它们的体积被设计的不尽相同。哇哦!很多读者此时似乎已经想明白是怎么回事了,肯定是不同的指令对应的字节数不一样,恩……这样只要我们搞到一张表就可以了!不是吗?一张可以描述每个指令所用二进制码的表格,然后我们就万事大吉了。但是很不幸,我在初次接触OpCode时也想出了这个“超级点子”,但是很可惜我的“超级点子”与各位读者的一样,并没有为我解决任何问题,请过目:7B

4、801000000MOVEAX,188BC3MOVEAX,EBX98BC7MOVEAX,EDI看到了吗,一样的指令,一样的目的操作数,得到的确是完全不同的机器码……2、这是为什么?嗯,我想这个问题是很明显的,源操作数如果是一个寄存器的话,那么能有几种可能呢?按照规则来讲貌似只有不超过50种可能,那么如果被操作数是一个数值呢?你想想,32位能表示多少数,将其乘以2就是最终的可能性了,这么多的可能性一定不是区区两个16位数就能表示过来的。所以说我们的OpCode的长度不是一成不变是有道理的,那么既然如此,那么既然CPU可以正确时识别它,这里面肯定有什么方

5、法是可以计算这些的,没错!这些确实是可以计算的,而且正像我们上面所设想的那样,Intel也确实为我们准备了表格,只不过不是一张,只不过有些复杂……首先,我们要现拥有这些,以下是我提供的一些连接,因为我们需要这些,请你下载他们:相关文档相关文档.7z(3.14MB,下载次数:1307)(下载页面http://bbs.hackav.com/thread-1641-1-1.html)拥有了这些文档后,我们就可以开始“破译”它了,现在加入我们要“破译”的是“ADDEAX,1”这条指令,请各位读者跟我一起做……我们先打开《处理器指令参考》手册(x86eas.h

6、lp),找到汇编指令ADD,我满看到了如下解释:注:前面的标号是笔者为了大家方便阅读而加上去的。OpcodeInstructionDescription0104ibADDAL,imm8Addimm8toAL0205iwADDAX,imm16Addimm16toAX0305idADDEAX,imm32Addimm32toEAX0480/0ibADDr/m8,imm8Addimm8tor/m80581/0iwADDr/m16,imm16Addimm16tor/m160681/0idADDr/m32,imm32Addimm32tor/m320783/0ib

7、ADDr/m16,imm8Addsign-extendedimm8tor/m160883/0ibADDr/m32,imm8Addsign-extendedimm8tor/m320900/rADDr/m8,r8Addr8tor/m81001/rADDr/m16,r16Addr16tor/m161101/rADDr/m32,r32Addr32tor/m321202/rADDr8,r/m8Addr/m8tor81303/rADDr16,r/m16Addr/m16tor161403/rADDr32,r/m32Addr/m32tor32解释:imm是立即数的意

8、思,而imm8就是指8个比特大小的立即数,下面将一一对上面的简写作出解释imm:立即数,例如01、123、0

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。