汇编语言

今天在博客群里看到群友发的一个Crackme程序,一好奇就下下来看了一下。 程序下载地址:http://pan.baidu.com/s/1bn72IaN 程序运行后的界面如下: 首先观察下界面组成,一个name和serial输入框,一个验证状态,一个About按钮,没有菜单,没有多余的按钮。 初步猜测程序通过监听输入框消息来实时验证输入信息的,验证状态也会实时显示在Status上面。 好了,话不多 […]

一、简要复习常用的汇编指令 1.堆栈相关指令 push:把一个32位的操作数压入堆栈中。这个操作导致esp被减4.(32位平台)。esp被形象地称为栈顶。我们认为顶部是地址小的区域,那么,压入堆栈的数据越多,这个堆栈也就越堆越高,esp也就越来越少。   pop:相反,esp被加4,一个数据出栈。pop的参数一般是一个寄存器,栈顶的数据被弹出到这个寄存器中。   sub:减法。 […]

标志寄存器 ①:标志寄存器(flag)和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。而flag寄存器是按位起作用的,也就是说,它的每一位都有专门的意义,记录特定的信息。   ②:ZF标志,它记录相关指令执行后,其结果是否为0,如果结果为0,那么zf=1;如果结果不为0,那么zf=0.        […]

转移指令的原理   ①:可以修改IP,或同时修改CS和IP的指令称为转移指令。 8086CPU的转移行为有以下几类。 只修改IP时,称为段内转移,比如:jmp ax。 同时修改CS和IP时,称为段间转移,比如:jmp 1000:0. 由于转移指令对IP的修改范围不同,段内转移又分为:短转移和近转移。 短转移IP的修改范围为-128-127. 近转移IP的修改范围为-32768-32767 […]

更灵活的定位内存地址的方法   ①:1.and指令:逻辑与指令,按位进程与运算。 mov al,01100011B and  al,00111011B 执行后:al=00100011B 通过该指令可将操作对象的相应位设为0,其他位不变。 2.or指令:逻辑或指令,按位进行或运算。 mov al,01100011B or     al,00 […]

[BX]和loop指令   ①:[BX]也表示一个内存单元,它的偏移地址在bx中,比如: mov ax,[bx] 将一个内存单元的内容送入ax,这个内存单元的长度为2字节(字单元),存放一个字,偏移地址在bx中,段地址在ds中。   inc bx的含义是bx中的内容加1   ②:loop指令的格式是:loop 标号,CPU执行loop指令的时候,要进行两步操作: 1. […]

我们继续学习汇编语言程序设计。 寄存器(内存访问)   ①:我们提出字单元的概念:字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。在以后的课程中,我们将起始地址为N的字单元简称为N地址字单元。   ②:8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址。 […]

好久没用在博客写笔记了,从今天开始我打算从新在博客把自己学习的一些东西重新温习一遍,如有不对的地方还请大家指出! 先从王爽的《汇编语言》开始吧。 基础知识   ①:在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。总线从屋里上来讲,就是一根根导线的集合。根据传送信息的不同,总线从逻辑上又分为3类:地址总线、控制总线和数据总线。 CPU从3号单元中读取数据的过程如下:   […]