- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编指令之OpCode快速入门
OpCode :
OpCode :
汇编指令之OOppCCooddee快速入门::
最近一直被一些初学者问及有关于汇编指令的长度问题,因此为此专门撰写本文,以求为不
知OpCode为何物,或者正为汇编长短不一的指令而烦恼的朋友一个最为快速的指引。
其实,OpCode 并不复杂,在本文中我不打算细致入微的告诉大家 OpCode的原理,不会为
大家带来一大堆有关于什么是定长指令、什么是变长指令的理论知识,更不会带着各位读者
玩OpCodeHacking,我只会告诉你“怎么了”、“为什么”以及“如何解决”。
1、我的汇编指令怎么了?
哦,天啊!怎么我今天突然发现汇编指令竟然是长短不一的!你还没发现吗?那么请过目:
1 E8CALL 00430B86
2 E9 17FEFFFF JMP
3 8B4424 04 MOV EAX, DWORD PTR SS:[ESP+4]
4 85C0 TEST EAX, EAX
5 56 PUSH ESI
6 8BF1 MOV ESI, ECX
我们可以看见“CALL00430B86”这条汇编指令竟然占用了5 个字节,而“PUSH ESI”则只占
用了1个字节,汇编指令的脾气犹如一只滑头的猴子一样让你摸不到头脑,它很明显的告诉
了你“嘿!兄弟,你别想搞懂我!”你也许会感到很郁闷,但是我并不这么想,因为如果我要
想自己搞一个反汇编引擎,或者是我要在我的壳里加上代码混淆功能……嗯,算了,就算是
我想娱乐一下搞搞免杀吧,那么我终归是要搞懂它的,为什么?因为如果搞懂它的话,那么
我就没办法做到这些!
很明显我们的汇编指令继承了Intel 工程师的狡猾本质,为了尽可能的减少体积,所以它们
的体积被设计的不尽相同。
哇哦!很多读者此时似乎已经想明白是怎么回事了,肯定是不同的指令对应的字节数不一样,
恩……这样只要我们搞到一张表就可以了!不是吗?一张可以描述每个指令所用二进制码的
表格,然后我们就万事大吉了。
但是很不幸,我在初次接触OpCode 时也想出了这个“超级点子”,但是很可惜我的“超级点
子”与各位读者的一样,并没有为我解决任何问题,请过目:
7 B8MOV EAX, 1
8 8BC3 MOV EAX, EBX
9 8BC7 MOV EAX, EDI
看到了吗,一样的指令,一样的目的操作数,得到的确是完全不同的机器码……
2、这是为什么?
嗯,我想这个问题是很明显的,源操作数如果是一个寄存器的话,那么能有几种可能呢?按
照规则来讲貌似只有不超过50种可能,那么如果被操作数是一个数值呢?你想想,32位能
表示多少数,将其乘以2就是最终的可能性了,这么多的可能性一定不是区区两个16位数
就能表示过来的。
所以说我们的OpCode的长度不是一成不变是有道理的,那么既然如此,那么既然 CPU 可
以正确时识别它,这里面肯定有什么方法是可以计算这些的,没错!这些确实是可以计算的,
而且正像我们上面所设想的那样,Intel 也确实为我们准备了表格,只不过不是一张,只不
过有些复杂……
首先,我们要现拥有这些,以下是我提供的一些连接,因为我们需要这些,请你下载他们:
相 关 文 档 相 关 文 档 .7z(3.14 MB, 下 载 次 数 : 1307) ( 下 载 页 面
/thread-1641-1-1.html)
拥有了这些文档后,我们就可以开始“破译”它了,现在加入我们要“破译”的是“ADD EAX,1”
这条指令,请各位读者跟我一起做……
我们先打开《处理器指令参考》手册(x86eas.hlp),找到汇编指令ADD,我满看到了如下解
释:
注:前面的标号是笔者为了大家方便阅读而加上去的。
Opcode Instruction Description
01 04 ib ADD AL,imm8 Add imm8 to AL
02 05 iw ADD AX,imm16 Add imm16 to AX
03 05 id ADD EAX,imm32 Add imm32 to EAX
04 80 /0 ib ADD r/m8,imm8 Add imm8 to r/m8
05 81 /0 iw ADD r/m16,imm16 Add imm16 to r/m16
06 81 /0 id ADD r/m32,imm32 Add imm32 to r/m32
07
您可能关注的文档
- ADC的积分非线性和微分非线性.pdf
- DAC和ADC应用电路设计.pdf
- 实验六 ADC0809转换实验.pdf
- Banggoo-ADC产品配置手册-5.2.pdf
- 第三章 DAC 和ADC接口.pdf
- 附录A verilog源代码.pdf
- MCS-51单片机ADC和DAC接口(六).pdf
- ZigBee学习之18——ZCL解读.pdf
- ADC模拟前端需要考虑的问题汇总.pdf
- 第9章 反应器.pdf
- 携程产品营销经理岗面试题库参考答案和答题要点.docx
- 携程产品经理岗面试题库参考答案和答题要点.docx
- 携程供应链管理专员岗面试题库参考答案和答题要点.docx
- 携程交易数据分析师岗面试题库参考答案和答题要点.docx
- 携程公共关系专员岗面试题库参考答案和答题要点.docx
- 携程内部培训专员岗面试题库参考答案和答题要点.docx
- 福建省福州市2023-2024学年高二上学期期末测试英语试卷(含答案).pdf
- 携程人力资源专员岗面试题库参考答案和答题要点.docx
- 福建省三明市2023-2024学年高二上学期期末测试英语试卷(含答案).docx
- 福建省三明市2023-2024学年高二上学期期末测试英语试卷(含答案).pdf
文档评论(0)