2.1汇编的学习环境搭建
2.1.1【我们为什么要学习汇编】
汇编的作用有很多,这里我们更偏终于对高级语言的理解,高级语言C语言、C++语言有很多概念,如果我们懂汇编,看懂每一行代码编译器生成的汇编代码,我们就能知道这行代码计算机在做什么,从本质上理解高级语言。汇编是高手的必经之路。
从事PC端、手机端开发的程序员,若要了解自己用高级语言编写的程序怎样与计算机硬件打交道的,需要掌握汇编语言,了解机器语言(二进制组成的语言)。如果打算从事安全相关行业的除了了解这些知识外,还需要了解汇编与二进制之间对应的关系,如2-1-1图:
【注释:汇编与二进制之间的关系是编程达人基础课程里PE和硬编码课程】
2.1.2【简单介绍16位、32位、64位汇编】
汇编分为16位、32位和64位。
1、16位、32位、64位是指X86处理器。【本章节泛指处理器】
2、16位处理器内部,能够一次性处理、传输、暂时存放的数据的最大长度是16位;
32位处理器内部,能够一次性处理、传输、暂时存放的数据的最大长度是32位;
64位处理器内部,能够一次性处理、传输、暂时存放的数据的最大长度是64位。
3、16位汇编一般是指DOS汇编(实模式汇编);
32位和64位汇编一般是指WINDOWS汇编(保护模式汇编);
4、16位处理器内,有8个通用寄存器AX、BX 、CX、 DX、 SI、 DI、 BP、 SP,其中前四个可以拆分成独立的8位寄存器,即AH、AL、BH、BL、CH、CL、DH、DL。
32位处理器在16位处理器基础上,扩展了8个通用寄存器的长度,即EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP。
64位处理器在32位处理器基础上,扩展了通用寄存器的长度,即RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP。
【注释:详细了解16位、32位、64位的不同可以参考Intel白皮书】
2.1.3【为什么学习32位汇编】
目前【X86】主流处理器架构是64位,现在很少有32位的处理器,16位的处理器我们平时接触的不多。16位汇编也就是DOS汇编,目前很少出现,现在主流是WINDOWS汇编,所以本章节就不概述16位汇编,跟随主流讲解32位下WINDOWS汇编,为什么我们学习的是32位汇编,而不是64位汇编呢?32位汇编和64位汇编两者没有本质的区别都是WINDOWS汇编,64位汇编只是在32位汇编的基础扩展了一些寄存器和指令。虽然操作系统支持64位,但目前很多程序都是32位的,所以我们并不能放弃32位汇编,相反,32位汇编很重要。
2.1.4【win32汇编】
我们学习的32位汇编并不是win32汇编,win32汇编是宏汇编,里面有大量的伪码。
2.1.5【这章节能让我们学习到汇编什么深度】
学习完汇编章节,我们能看懂C语言和C++语言及其他高级语言编写的普通应用程序,如果要看操作系统内核、学习保护模式,请看编程达人相关的课程资料。
2.1.6【配置汇编的学习环境】
我们需要用到的工具是DTDEBUG,可到编程达人官网下载,下载地址见页尾。
下载安装后,我们双击打开DTDEBUG程序,点击菜单键:Options->Appearance->Directorics,找到安装文件夹DTDebug下的udd文件夹,将UDD path改为udd路径;找到plugin文件夹,将Plugin path路径设为plugin文件夹路径,如2-1-2图:
配置好环境后,我们用DTDEBUG打开一个程序,打开的方式有两种,一种是进入点击菜单键:File--> open,选择相应的程序,一种是将程序直接拖进DTDEBUG窗口中,DTDEBUG一共四个界面,左上角是汇编语言,程序执行到哪一步都可以在这个窗口看到,右上角是寄存器窗口,左下角内存窗口,右下角是堆栈窗口。如图2-1-3:
图2-1-3 DTDEBUG介绍
u下一节介绍寄存器。