2022年破解软件教程入门篇--汇编语言 .pdf

上传人:Q****o 文档编号:30523252 上传时间:2022-08-06 格式:PDF 页数:17 大小:115.23KB
返回 下载 相关 举报
2022年破解软件教程入门篇--汇编语言 .pdf_第1页
第1页 / 共17页
2022年破解软件教程入门篇--汇编语言 .pdf_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《2022年破解软件教程入门篇--汇编语言 .pdf》由会员分享,可在线阅读,更多相关《2022年破解软件教程入门篇--汇编语言 .pdf(17页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第二章 - 汇编语言稍微有点儿计算机知识的朋友一定知道,计算机是只识别0 和 1 的,最初那会儿,要写程序,就要用0 和 1 来写,呵呵, Cool 吧!所以曾经有过的对程序员的崇拜,可能就源自那个时候吧后来,人们发现用0和 1 来写程序,太不爽了,不但写起来不上手,而且回过头来看的话,应该很难再看明白了,总之出于这些原因,就有了汇编语言。汇编语言用一些助记符来代替0 和 1 的多种组合, 也就是各个指令, 这样的话,从一定程度上来说, 方便了许多 (一头老牛: 方便太多了)(一只菜鸟:一点儿也不方便,完全看不懂)。但是,汇编也同样不方便,同样写起来不爽, 而且后期维护同样不方便,再加上人们慢

2、慢地需要写一些更大的程序,在这样的情况下,高级语言就被人发明了出来,就是我们今天用的Basic 、pascal 、C、C+ 等等等等,这些语言的出现,一下了使程序的开发难度大大减低了(一头老牛:减低太多了,我膝盖就能写程序了) (一只菜鸟:还不是一样难),以前用汇编要很长时间才能开发出来的程序,现在只需要很短的时间且很轻松的就可以搞定了,特别是最近几年, 可视化编程的大肆普及,使程序员的神秘感一下子摔了下来, Coder这样的词现在都满天飞了。最惨的就是汇编,一夜之间变成了低级语言、下流的语言、吃完大蒜不刷牙的民工、开车加完油不给钱的地痞、在公共汽车上吐口水的冰岛人等等等等(汇编:呜呜呜 我不

3、活了)。但是汇编还是有它先天的优势的,因为其与CPU 内部的指令一一对应,所以在一些特殊的场合,必须由汇编来实现,比如访问硬件的端口、写名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - 病毒.而且生成的可执行文件效率巨高,且生成的可执行文件贼小,写小程序是很爽的,呵呵,而且用汇编写注册机,是件很轻松的事,你不用再为怎样还原为你所熟悉的语言而为难。说了这么多,还是切入主题吧(昏倒观众若干):既然计算机只识别0 和 1,那么,所有存

4、储在计算机上的文件,也都是以二进制的形式存放的,当然也包括可执行文件了。所以,你只要找一个十六进制编辑器比如UltraEdit 什么的,就可直接打开并查看可执行文件了,呵呵,如果你能看懂的话你会发现,此时看到的, 全是些十六进制数值 (每 4 位二进制数可转换为一位十六进制数),这就是可执行文件的具体内容,当然,其中就包括可执行文件的代码了。(一头老牛:好亲切啊)(一只菜鸟:笨牛,你给我闭嘴,我眼都花了)。呵呵,此时,你是不是觉得看这些东西,有些那个?这些东西看起来就像有字天书, 没人能靠这玩意儿来进行分析,于是乎。就有了相应的软件,可以将这些十六进制数值转换为相应的汇编代码,这样的话, 我们

5、就可以对别人的软件进行分析了。这就是所谓的逆向分析了。呵呵,聪明的你现在一定在想,如果找到软件计算注册码的部分,并对其进行分析, 弄懂它的计算方法, 那么你不就不用通过¥的方式来进行软件注册了吗?当然, 你也可以将此计算过程还原为任意一个你所熟悉的编程语言,那么,编译后的这个程序,就叫做注册机,它的功能就是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - 计算某一特定软件的注册码。(呵呵,是不是经常在软件中看到此类说明? 禁止制

6、作和提供该软件的注册机及破解程序;禁止对本软件进行反向工程,如反汇编、反编译等)作者这样做, 心情我们是可以理解的,毕竟人家花了那么多心思在自己的软件上, 所以,我不希望你仅仅是因为交不起注册费的原因来学习破解。总的说来,上边儿的介绍有点儿太理想化了,上面提到的分析方法,就是所谓的静态分析,此类分析常用的工具有W32DASM、IDA和 HIEW等。静态分析, 顾名思义, 就是只通过查看软件的反汇编代码来对软件进行分析。一般如果只是想暴破软件,只进行静态分析就够了。但要想真正的弄清注册算法, 一般还是要进行动态分析的,即能过调试器来一边执行程序一边进行分析。 具体内容, 我会在破解原理 和调试器

7、入门中详细说明,呵呵,毕竟现在都以经有点儿跑题了。我废话说了这么多, 其实就是想告诉你汇编的重要性,我不要求你精通,但最少你也得能看懂吧, 要不,还谈什么分析?虽然有哥们儿一点儿汇编都不懂就上路了,甚至还破掉了几个软件,但是,这样是不是惨了点儿?难不成你想暴破软件暴破一辈子?其实你完全不用惧怕汇编的,看上去怪吓人的, 其实跟你平时背那些控件的属性方法差不多,MFC 那么多你都搞的定,汇编命令才有多少?而且,汇编不光只是在Crack 软件时有用,在好多地方也都有用,且用处巨大,所以我觉得,把汇编拿下,是件义不容辞的事:你只要相信它并不难就好了。名师资料总结 - - -精品资料欢迎下载 - - -

8、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - (以下为第二次修改时加入)先给你讲一下CPU 的组成吧:CPU 的任务就是执行存放在存储器里的指令序列。为此,除要完成算术逻辑操作外,还需要担负CPU和存储器以及I/O 之间的数据传送任务。早期的 CPU 芯片只包括运算器和控制器两大部分。到了近几年, 为了使存储器速度能更好地与运算器的速度相匹配,又在芯片中引入了高速缓冲存储器(知道为什么P4比 P4赛扬贵那么多吗?)。(当!一个硬物飞了过来,话外音:你讲这些做什么,我们又不要设

9、计CPU )你急什么嘛,由于汇编比较“低级 ” ; 所以它是直接操作硬件的,你以为这是用 VB呢,想什么时候用变量随手就可以拿来用,你不掌握好CPU 内部的一些工作分配情况,到时怎么来看汇编代码啊。(当!又一声,重要还不快点儿说)除了高速缓冲存储器之外的组成,大体上可以分为3 个部分:1. 算术逻辑部件ALU (arithmeticlogicunit )用来进行算术和逻辑运算。这部分与我们的关系不太大,我们没必要管它。2. 控制逻辑。同样与我们的关系不大。3. 这个才是最最重要的。工作寄存器,它在计算机中起着重要的作用,每一个寄存器相当于运算器中的一个存储单元,但它的存取速度却贼快贼快,比存储

10、器要快很多了。 它用来存放计算过程中所需要的或所得到的各种信息,包括操作数地址、操作数及运算的中间结果等。下面我们专门的介绍这些寄存器。在介绍之前,有必要说点儿基础性的知识。知道什么是32 位吧,就是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - 说寄存器是 32 位的,晕 等于没说。在 CPU 中,一个二进制位被看作是一位,八位就是一个字节,在内存中,就是以字节为单位来在存储信息的,每一个字节单元给以一唯一的存储器地址,称为

11、物理地址,到时候访问相应的内存, 就是通过这个地址。 八个二进制位都能表达些什么呢?可以表达所有的ASCII 码, 也就是说一个内存单元可以存储一个英文字符或数字什么的, 而中文要用 Unicode 码来表示, 也就是说两个内存单元,才能装一个汉字。 十六位就是两个字节这不难理解吧,当然啦,那有了十六位,就肯定有三十二位六十四位什么的,三十二位叫做双字,六十四位就叫做四字。今天我们所使的CPU ,相信全是32 位的了,除非你用的是286 或更早的话。自然而然,CPU 中的寄存器,也就是32位的了,也就是说一个寄存器,可以装下32 个 0 或 1(这其中不包括段寄存器)。大体上来说, 你需要掌握

12、的寄存器, 有十六个,我一个一个给介绍给你:首先,介绍小翠儿(当! ,我自己打我自己一下得了,最近看周星驰看多了),重说,首先,介绍通用寄存器。一共八个,分别是EAX 、EBX 、ECX 、EDX 、ESP 、EBP 、EDI、ESI。其中, EAX EDX这四个寄存器又可称为数据寄存器,你除了直接访问外,还可分别对其高十六位和低十六位(还计的我说它们是32 位的吗?)进行访问。它们的低十六位就是把它们前边儿的E去掉,即 EAX的低十六位就是AX 。而且它们的低十六位又可以分别进行八位访问,也就是说, AX 还可以再进行分解,即AX还可分为 AH (高八位) AL(低八位)。其它三个寄存器请自

13、行推断。这样的话,你就可以应付各种情名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - 况,如果你想操作的是一个八位数据,那么可以用MOV AL ( 八位数据)或 MOV AH( 八位数据 ) , 如果你要操作的是一个十六位数据,可以用 MOVAX ( 十六位数据 ) 三十二位的话,就用MOVEAX( 三十二位数据 ) 也许我这样说,你还是会不明白,没关系,慢慢来,我给你大概画张图吧,虽然不怎么漂亮: 高十六位EAXAH AX A

14、L ( 我倒啊 .这个图为啥老是不能正常显示?我都重画三遍了)明白了吗?不明白没有关系,你就按你自己的理解能力,能理解多少,就理解多少。这四个寄存器, 主要就是用来暂时存放计算过程中所用的操作数、结果或其它信息。而 ESP 、EBP 、EDI、ESI 这四个呢,就只能用字来访问,它们的主要用途就是在存储器寻址时,提供偏移地址。因此,它们可以称为指针或变址寄存器。话说回来,从386 以后,所有的寄存器都可以用来存储内存地址。(这里给你讲一个小知识,你在破解的时候是不是看到过EBX这样的形式呢?这就是说此时EBX中装的是一个内存地址, 而真正要访名师资料总结 - - -精品资料欢迎下载 - - -

15、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 17 页 - - - - - - - - - 问的,就是那那个内存单元中所存储的值)。在这几个寄存器中, ESP称为堆栈指针寄存。 堆栈是一个很重要的概念,它是以 “后进先出 ”方式工作的一个存储区,它必须存在于堆栈段中,因而其段地址存放于SS寄存器中。它只有一个出入口,所以只有一个堆栈指针寄存器。ESP 的内容在任何时候都指向当前的栈顶。我这样说你可能会觉的还是不明白,那我举个例子吧,知道民工盖房吧,假设有两个民工, 一个民工(以下简称民工A)要向地上铺砖, 另一个民工 (

16、以下简称民工 B)给民工 A递砖,民工 A趴在地上,手边是民工B从远处搬来的板砖,他拿起来就用,民工B从远处搬来后,就还放在那一堆砖上,这样,民工 A拿着用后,民工 B 随既就又补了上去,这就是后进先出。你在脑子里想象一下这个这程。有没有想明白,民工A永远是从最上边开始拿砖。堆栈就是这样,它的基址开始于一个高地址,然后每当有数据入栈,它就向低地址的方向进行存储。相应的入栈指令是PUSH 。每当有数据入栈,ESP 就跟着改变,总之,它永远指向最后一个压入栈的数据。之后,如果要用压入堆栈的数据,就用出栈指令将其取出。相应的指令是 POP ,POP 指令执行后, ESP 会加上相应的数据位数。特别是

17、现在到了Win32系统下面,堆栈的作用更是不可忽视,API 所用的数据,均是靠堆栈来传送的,即先将要传送的数据压入堆栈,然后CALL 至 API 函数, API函数会在函数体内用出栈指令将相应的数据出栈。然后进行操作。以后你就会知道这点的重要性了。许多明码比较的软件,一般都是在关键CALL前,将真假两个注册码压入栈。然后在 CALL内出栈后进行比较。所以,只要找到个关键CALL ,就能在压栈指令处,下d名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - -

18、- - - - - - 命令来查看真正的注册码。具体内容会在后面详细介绍,本章暂不予讨论。另外还有 EBP ,它称为基址指针寄存器,它们都可以与堆栈段寄存器SS联用来确定堆栈中的某一存储单元的地址,ESP用来指示段顶的偏移地址,而 EBP可作为堆栈区中的一个基地址以便访问堆栈中的信息。ESI(源变址寄存器)和EDI(目的变址寄存器)一般与数据段寄存器DS联用,用来确定数据段中某一存储单元的地址。这两个变址寄存器有自动增量和自动减量的功能,可以很方便地用于变址。在串处理指令中,ESI 和 EDI作为隐含的源变址和目的变址寄存器时,ESI 和 DS联用, EDI和附加段 ES联用,分别达到在数据段

19、和附加段中寻址的目的。目前暂时不明白不要紧。接下来,再介绍如花(当当当,我再打自己三下算了)接下来,介绍一下专用寄存器,呵呵,有没有被这个名字吓倒?看起来怪专业的。所谓的专用寄存器,有两个,一个是EIP,一个是 FLAGS 。我们先来说这个EIP,可以说, EIP 算是所有寄存器中最重要的一个了。它的意思就是指令指针寄存器,它用来存放代码段中的偏移地址。在程序运行的过程中,它始终指向下一条指令的首地址。它与段寄存器CS联用确定下一条指令的物理地址。当这一地址送到存储器后,控制器可以取得下一条要执行的指令,而控制器一旦取得这条指令就马上修改EIP 的内容,使它始终指向下一条指令的首地址。可见,计

20、算机就是用EIP 寄存器来控制指令序列的执行流程的。那些跳转指令,就是通过修改EIP 的值来达到相应的目的的。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 17 页 - - - - - - - - - 再接着我们说一下这个FLAGS ,标志寄存器,又称PSW(programstatusword) ,即程序状态寄存器。这一个是存放条件标志码、控制标志和系统标志的寄存器。其实我们根本不需要太多的去了解它,你目前只需知道它的工作原理就成了,我举个例子吧:CmpEAX,EBX;

21、 用 EAX与 EBX相减JNZ 00470395 ; 不相等的话,就跳到这里;这两条指令很简单, 就是用 EAX 寄存器装的数减去EBX寄存器中装的数。来比较这两个数是不是相等,当Cmp 指令执行过后,就会在FLAGS 的ZF(zeroflag )零标志位上置相应值,如果结果为0,也就是他们两个相等的话, ZF置 1,否则置 0。其它还有 OF (溢出标志) SF(符号标志) CF (进位标志) AF(辅助进位标志)PF(奇偶标志)等。这些你目前没必要了解那么清楚,会用相应的转移指令就行了。最后要介绍的就是段寄存器了(刚才是谁说的樱红?反正不是我)这部分寄存器一共六个,分别是CS代码段, D

22、S 数据段, ES 附加段, SS堆栈段, FS以及 GS这两个还是附加段。其实现在到了Win32 环境下,段寄存器以经不如DOS 时代那样重要了。所以,我们知道就行了。啰嗦了这么多, 相信你对 CPU 以经有了个大概的了解了吧。什么?还是什么也不明白?呵呵,那也不要灰心,请相信这是我的错,是我没有讲清楚而已,你可以去参考一些书籍。我始终觉的,你案头有一本讲汇编的书是非常非常有必要的,我这边儿是清华版的80 x86 汇编语言程序名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,

23、共 17 页 - - - - - - - - - 设计沈美明主编,46元。我们接下来就再讲一讲一些常用的汇编指令吧。(由于考虑到目前以经有了相应的帖子,所以,我只是从汇编指令中,挑出一些最常用,需要掌握的,更多内容,还请参见书本。)CMP A,B 比较 A与 B其中 A与 B可以是寄存器或内存地址,也可同时是两个寄存器,但不能同都是内存地址。这个指令太长见了,许多明码比较的软件,就用这个指令。MOV A,B 把 B的值送给 A其中,A与 B可是寄存器或内存地址,也可同时是两个寄存器,但不能同都是内存地址。Xor a,a 异或操作,主要是用来将a 清空LEA装入地址,例如LEA DX ,stri

24、ng将字符的地址装入DX寄存器PUSH压栈POP出栈ADD加法指令格式 :ADD DST ,SRC执行的操作: (DST)-(SRC)+(DST)SUB减法指令格式 :SUB DST ,SRC执行的操作: (DST)-(DST)-(SRC)MUL 无 符 号 乘 法 指 令格 式 :MUL SRC 执 行 的 操 作 : 字 节 操 作(AX)-(AL)*(SRC); 字 操 作 (DX,AX)-(AX)*(SRC); 双 字 操 作 :(EDX,EAX)-(EAX)*(SRC)DIV 无符号除法指令格式 :DIV SRC执行的操作 : 字节操作: 16们被除数在 AX中,8位除数为源操作数,

25、结果的8 位商在 AL中,8位余数在AH中。表示为:(AL)-(AX)/(SRC)的商, (AH)-(AX)/(SRC)的余数。字操作:32 位被除名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 17 页 - - - - - - - - - 数在 DX,AX中。其中 DX为高位字, 16 位除数为源操作数,结果的16位商在 AX中,16 位余数在 DX中。表示为:(AX)-(DX,AX)/(SRC)的商,(DX)-(DX,AX)/(SRC)的余数。双字操作 :64 位的

26、被除数在EDX,EAX 中。其中 EDX为高位双字; 32 位除数为源操作数, 结果的 32 位商在 EAX中,32 位余数在 EDX中。表示为:(EAX)-(EDX,EAX)/(SRC) 的商, (EDX)-(EDX,EAX)/(SRC) 的余数。NOP无作用,可以用来抹去相应的语句,这样的话,嘿嘿嘿CALL调用子程序,你可以把它当作高级语言中的过程来理解。控制转移指令:JE 或 JZ 若相等则跳JNE或 JNZ 若不相等则跳JMP无条件跳JB 若小于则跳JA 若大于则跳JG 若大于则跳JGE 若大于等于则跳JL 若小于则跳JLE 若小于等于则跳总的来说,以上几个,都是比较常见的,需要掌握,

27、但需要掌握的绝不止这几个, 其它的指令希望你能在私下里再了解一下,可以找相应的教程来看。刚才忘了,现在再把数制转换也给贴上:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 17 页 - - - - - - - - - 首先说二进制转换为十进制的问题:各位二进制数码乘以与其对应的权之和即为该二进制相对应的十进制数。例如:10100=2的 4 次方 +2的 2 次方,也就是十进制数20。11000=2的 4 次方 +2的 3 次方,也就是十进制数24。接着说一下十进制数转换

28、为二进制数的方法:这样的方法到底有多少,我也不清楚,我只讲最简单的一个- 除法:把要转换的十进制数的整数部分不断除以2,并记下余数,直到商为0为止。例:N=34D(说明一下,你可能在某些数字的后边看到过加有一个字母,这个字母便是用来表示数制的,十进制数用D,二进制数用B,八进制数用 O ,十六进制数用H)34/2=17 (a0=0)17/2=8 (a1=1)8/2=4 (a2=0)4/2=2 (a3=0)2/2=1 (a4=0)1/2=0 (a5=1)所以 N=34D=100010B 。对于被转换的十进制数的小数部分则应不断乘以2, 并记下其整数部分,直到结果的小数部分为0 为止。十六进制数与

29、二进制数、十进制数之间的转换:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 17 页 - - - - - - - - - 总的来说,十六进制数与二进数之间的转换,应该算是很简单的了,你只需把与之相对应的数值进行转换就成了。十 六 进 制 数 的 基 数 是16 , 共 有16 个 数 码 , 它 们 是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中A表示十进制中的10,其余类推。它们与二进制和十进制数的关系如下:0H=0D=0000B,1H=1D

30、=0001B,2H=2D=0010B,3H=3D=0011B,4H=4D=0100B,5H=5D=0101B,6H=6D=0110B,7H=7D=0111B,8H=8D=1000B,9H=9D=1001B,AH=10D=1010B,BH=11D=1011B,CH=12D=1100B,DH=13D=1101B,EH=14D=1110B,FH=15D=1111B所以,二进制与十六进制之间要进行转换的话,只要把它们由低到高每四位组成一级,直接用十六进制来表示就可以了:例: 1000 1010 0011 01018 A 3 5十六进制转二进制则用只需将每一位用四位二进制数来表示就成了:例: A B 1

31、 01010 1011 0001 0000最后是十六进制数与十进制数之间的互相转换十六进制数转十进制数各位十六进制数与其对应权值的乘积之和即为与此十六进制数相对应的十进制数。例:N=BF3CH=11*16 的 3 次方 +15*16 的 2 次方 +3*16 的 1 次方 +12*16 的 0 次方名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 17 页 - - - - - - - - - =11*4096+15*256+3*16+12*1=48956D十进制转十六进制

32、我还是只讲最简单的除法:把要转换的十进制数的整数值部分不断除以16,并记下余数,直到商为 0 为止。例 N=48956D48956/16=3059 (a0=12)3059/16=191 (a1=3)191/16=11 (a2=15)11/16=0 (a3=11)所以 N=48956D=BF3CH。通过以上的介绍,我不知道你到底看懂没有,如果有的话,请你去看一下书本,把我没讲到的地方和讲过了的地方都仔细地看几遍。如果你根本就没有看懂, 那么你就更需要去看书了,不要因为这就丧失掉学习的信心。你认真地把前边儿的CPU介绍看完,弄清楚寄存器的概念,再把后边汇编指令拿下,就可以上路了。你认真学,认真背的

33、话,会发现其实并没你想像中的那么难。一星期的时间,就可大概掌握了,但只是掌握而已,最起码可以看懂汇编代码了。要真想学好的话,就连后边儿的也一同看了吧,再写一些小程序来练练手。当然想精通汇编,那可不是一天两天一月两月的事,但你只要有恒心,有什么搞不定的?CPU也是人做的,指令只是其中的一部分而已,人家能做出CPU ,你还怕连使用名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 17 页 - - - - - - - - - 都学不会?课后 FAQQ:我以前学过 8086/80

34、88 ,并且也在 DOS 下写过程序,能行吗?A:绝对能行,相对8086/8088 ,现在的 CPU 在基本指令方面,也没有添加多少新的指令。你只需了解一下各寄存器的变化以及补充一下Windows程序的知识就成了。而且,既然你用汇编在DOS 下写过程序,那么对 Debug等调试器,肯定已经很上手了,所以你有先天的优势。Q:汇编对我来说不成问题,可我为什么总是不上手呢?A:呵呵,这样的老鸟倒还有不少,他们把汇编用的相当熟练,但是,只是因为经验的原因, 所以才觉的不上手的, 许多人当初不也都这样吗?最起码我就是,见了CALL就跟进,呵呵,倒跟了不少API,所以对于这部分高手,你只需多练练手以及掌握

35、一些分析的技巧就成了。Q:我没学过编程,能学汇编吗?A:总的来说,也行。不过希望汇编的学习,不会使你丢掉学习其它高级语言的信心。 :)答网友问Q:寄存器可以随便用么, 有没有什么限制?写个程序的时候那些变量什么的可以放在任意的寄存器么?A:呵呵,我现在就来回答楼上朋友的问题。寄存器有它的使用机制,及各个寄存器都有着明确的分工。如小翠儿如数据寄存器(EAX-EDX ),它们都是通用寄存器,及在软件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 17 页 - - - - -

36、 - - - - 中,任何数据都可存放于此。但是除此之外,它们又可以都可以用于各自的专用目的。例如:EAX可以作为累加器来使用,所以它是算术运算的主要寄存器。在乘除法等指令中指定用来存放操作数。比如在乘法中, 你可以用 AL或 AX或EAX来装被乘数, 而 AX或 DX:AX或 EAX或 EDX:EAX则用来装最后的积。EBX一般在计算存储器地址时,它经常用作基址寄存器。ECX则常用来保存计数值,如在移位指令它用来装位移量、循环和串处理指令中作隐含的计数器。最后就剩下四大天王中的黎明了,近一段时间来,他总是比较低调.(你别打我了,我去撞墙好了)最后就剩下EDX了,一般在作双字长运算时把 DX和

37、 AX组在一起存放一个双字长数 (你还记的什么是双字长吧,举个例子,比如说有一个数二进制数据01101000110101000100100111010001 ,你要把它寄存起来,就可以把0110100011010100( 即高十六位 ) 放在 DX中,把 0100100111010001( 即低十六位 ) 放在 AX中,这个数表示为DX:AX )当然完全可以用一个EDX就把这个数给装下。所以,还可以用EDX:EAX 来装一个 64 位数据,这个你会推断出来吧。而 ESP 、EBP 、EDI、ESI,我上边儿以经大概介绍的差不多了,所以这里不说它们了。当然还有其它的一些限制,因为我们只是要看程序

38、的汇编代码( 人家写好了的,肯定不会犯错误吧) ,而不是要去写,所以可以不必掌握。有名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 17 页 - - - - - - - - - 性趣的话,去看相关书籍。另外再说一下你的最后一个问题“写个程序的时候那些变量什么的可以放在任意的寄存器么?”这句话我不明白你要问的是什么。我想你可能是把一些关点给搞错了,变量这词通常都是出现在高级语言中的,而你用高级语言写程序的话,完全不用理解那些寄存器什么的,这些都跟高级语言没什么关系。 但是最终, 高级语言也还是把你写的程序转换为对寄存器、内部存储器的操作。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 17 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com