电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

汇编指令之OpCode快速入门

汇编指令之OpCode快速入门_第1页
1/6
汇编指令之OpCode快速入门_第2页
2/6
汇编指令之OpCode快速入门_第3页
3/6
汇编指令之OpCode快速入门:最近一直被一些初学者问及有关于汇编指令的长度问题,因此为此专门撰写本文,以求为不知OpCode为何物,或者正为汇编长短不一的指令而烦恼的朋友一个最为快速的指引。其实,OpCode并不复杂,在本文中我不打算细致入微的告诉大家OpCode的原理,不会为大家带来一大堆有关于什么是定长指令、什么是变长指令的理论知识,更不会带着各位读者玩 OpCodeHacking,我只会告诉你“怎么了”、“为什么”以及“如何解决”。1、我的汇编指令怎么了?哦,天啊!怎么我今天突然发现汇编指令竟然是长短不一的!你还没发现吗?那么请过目:1E8 31880000 CALL 00430B862E9 17FEFFFF JMP 0042817138B4424 04 MOV EAX, DWORD PTR SS:[ESP+4]485C0 TEST EAX, EAX556 PUSH ESI68BF1 MOV ESI, ECX我们可以看见“CALL 00430B86”这条汇编指令竟然占用了 5 个字节,而“PUSH ESI”则只占用了 1 个字节,汇编指令的脾气犹如一只滑头的猴子一样让你摸不到头脑,它很明显的告诉了你“嘿!兄弟,你别想搞懂我!”你也许会感到很郁闷,但是我并不这么想,因为如果我要想自己搞一个反汇编引擎,或者是我要在我的壳里加上代码混淆功能……嗯,算了,就算是我想娱乐一下搞搞免杀吧,那么我终归是要搞懂它的,为什么?因为如果搞懂它的话,那么我就没办法做到这些!很明显我们的汇编指令继承了 Intel工程师的狡猾本质,为了尽可能的减少体积,所以它们的体积被设计的不尽相同。哇哦!很多读者此时似乎已经想明白是怎么回事了,肯定是不同的指令对应的字节数不一样,恩……这样只要我们搞到一张表就可以了!不是吗?一张可以描述每个指令所用二进制码的表格,然后我们就万事大吉了。但是很不幸,我在初次接触 OpCode时也想出了这个“超级点子”,但是很可惜我的“超级点子”与各位读者的一样,并没有为我解决任何问题,请过目:7B8 01000000 MOV EAX, 188BC3 MOV EAX, EBX98BC7 MOV EAX, EDI看到了吗,一样的指令,一样的目的操作数,得到的确是完全不同的机器码……2、这是为什么?嗯,我想这个问题是很明显的,源操作数如果是一个寄存器的话,那么能有几种可能呢?按照规则来讲貌似只有不超过 50 种可能,那么如果被操作数是一个数值呢?你想想,32 位能表示多少数,将其乘以2 就是最终的可能性了,这么多的可能性一定不是区区两个16 位数就能表示过来的。所以说我们的OpCode的长度不是一成不变是有道理的,那...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

汇编指令之OpCode快速入门

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部