码迷,mamicode.com
首页 > 其他好文 > 详细

<<ASM>> x86汇编指令浅析

时间:2015-12-09 19:31:27      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:

              学习研究系统/软件底层机制的朋友,汇编是必修课之一。由于汇编具有低级语言固有的特性,使得前期的学习掌握异常困难。本文将着重介绍一些常用而又关键的汇编指令,借此提携那些还在苦苦攀援的“初学者”们。

              目前市场上主流的汇编教材中,王爽所著的《汇编语言(第二版)》比较受读者的青睐。笔者自学汇编所选的汇编教材则是杨继文所著的《80x86汇编语言程序设计教程》和《汇编语言程序设计——从DOS到Windows》张雪兰/谭毓安;根据书的厚度就可知其难易程度。读者若初次接触汇编,可以考虑以上三本经典教材,有一定基础的可以考虑罗云彬的Win32汇编……

              学汇编,主要还是看你的用途。这一点请初学者谨记!汇编语言的难度是业内公认的,你完全没必要把整本书看完吃透才去接触逆向、破解等。我的建议是“选择性学习”:需要汇编进行编程开发的朋友,自然要按照书中安排的目录顺序按部就班的学习,但不要贪多(一本足矣!其余的靠www.baidu.com就行了);目标是软件调试、加解密、恶意代码分析的朋友,建议只看“前三章”(随后根据需要选择阅读),大体上应该是三部分的内容:

【微处理器的基本介绍/汇编的数据类型(包括进位制转换与运算)

【寻址方式/指令集/寄存器】

【汇编编程的基本元素(类似于C中的表达式、语句、控制结构部分)        

              学以致用!不要单纯地为了汇编而去学汇编,务必明确目标是什么!学习的过程中,强调亲自上机调试(而不是死扣图片和文字),才能理解深刻。

               根据自身的学习能力,合理安排学习时间。遇到难点善于网络搜索,要能够达到“不会作诗也会吟”的程度。

**********************************************************************************

       我简要总结了指令集部分:

       图1:

      技术分享

       可以明确告诉大家,一百多条指令不需要全部记忆(也绝对不是像背单词一样的记!),我甄选了一小部分,是务必要掌握的:

       MOV/LEA/XCHG    ;传送/传送EA/交换

       PUSH/POP        ;入栈/出栈

       CALL/RETN        ;过程调用/返回

       ADD/SUB/INC/DEC  ;加减运算/加1/减1

       JMP/JE……       ;无条件转移/条件转移

       CMP             ;比较

       INT              ;中断

       XOR             ;异或(相同为0,不同为1,用于寄存器清零)

       (另外需要注意,AX是16位寄存器,相应的32位版本则是EAX……)

 

接下来上图,带大家与汇编指令亲密接触。

VC6.0  图2:

技术分享        

VC6.0 Debug:图3

技术分享

OllyDBG:图4

技术分享

图示为main函数的反汇编代码

Ollydbg给的信息比VC更详细。

       

        相信大家都能毫不费力看懂C代码,但是反汇编之后呢?做逆向,往往都不会接触源代码,面对的则是一个“黑箱”,这就需要拿出反汇编的利器(IDA、W32Dasm等)进行静态分析。

        每一条指令我都添加了注释(右边),请您配合C代码逐条分析。分析的程序功能不同,则相应的指令也会不同;

        main的反汇编结构如图5:

技术分享

End.

2015/12/9.Wednesday

YPP.

      

<<ASM>> x86汇编指令浅析

标签:

原文地址:http://www.cnblogs.com/yppshell/p/5033774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!