学习备忘录

学习加密解密知识

通过VC学习反汇编——汇编初步

 

题记

因工作中经常用到反汇编解一些算法,故对次有一定的接触,为了更进一步理解C、C++、VC等他们的特性,记下一些东西,就当自娱自乐了。

汇编初步

1         80x86汇编

1.1      寄存器

32位CPU所含有的寄存器分类简介:

1.1.1          数据寄存器(EAX、EBX、ECX和EDX)

数据寄存器主要用来保存操作数和运算结果等信息。

寄存器的低16位分别是:AX、BX、CX和DX,每个16位寄存器又可以分为两个8位寄存器。

32位寄存器

EAX

EBX

ECX

EDX

16位寄存器

---

AX

---

BX

---

CX

---

DX

8位寄存器

---

AH

AL

---

BH

BL

---

CH

CL

---

DH

DL

1.1.2          2个变址寄存器(ESI和EDI)

低16位分别是SI和DI。通常在串操作中,ESI保存源地址,EDI保存目标地址。

1.1.3          2个指针寄存器(ESP和EBP)

低16位分别是SP和BP。

ESP是堆栈指针寄存器,保存堆栈指针,永远指向栈顶;EBP保存基址指针。

1.1.4          6个段寄存器(ES、CS、SS、DS、FS和GS)

ECS——代码段寄存器(Code Segment Register),其值为代码段的段值;

EDS——数据段寄存器(Data Segment Register),其值为数据段的段值;

EES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;

ESS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;

EFS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;

EGS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。

1.1.5          1个指令指针寄存器(EIP)

指向下一条将要执行的指令

1.1.6          1个标志寄存器(EFlags)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

 

 

 

 

OF

DF

IF

TF

SF

ZF

 

AF

 

PF

 

CF

9个标志可分成两组,第一组6个标志主要受加减运算和逻辑运算结果的影响,称为运算结果标志,第二组标志不受运算结果的影响,称为状态控制标志。

运算结果标志包括以下6位:

OF(Overflow Flag)溢出标志,在运算过程中,如操作数超出了机器能表示的范围,则称为溢出。此时OF位置1,否则置0。

SF(Sign Flag)符号标志,记录运算结果的符号,结果为负时置1,否则置0。

ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0。

CF(Carry Flag)进位标志,记录运算时有效位产生的进位值。例如,执行加法指令时,最高有效位有进位时置1,否则置0。

AF(Auxiliary carry Falg)辅助进位标志,记录运算时第3位(半个字节)产生的进位值。例如,执行加法指令时第3位有进位时置1,否则置0。

PF(Parity Flag)奇偶标志,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。

控制标识位有三个:

DF(Direction Flag)方向标志,在串处理指令中控制处理信息的方向用。当DF位为1时,每次操作后是变址寄存器SI和DI减量,这样就是串处理从高地址向低地址方向处理。当DF为0时,则使SI和DI增量,使串处理从低地址向高地址方向处理。8086/8088提供的专门用于设置方向标志DF的指令是STF,专门用于清除DF的指令时CLD。

IF(Interrupt Flag)中断向量,当IF为1时,允许中断,否则关闭中断。有关中断原理将在后面详细讲解。8086/8088提供的专门用于设置中断允许标志IF的指令是STI,专门用于清IF的指令是CLI。

TF(Trap Flag)追踪标志,用于单步操作方式,当追踪标志TF被置1后,CPU进入单步方式。所谓单步方式是指在一条指令执行后,产生一个单步中断,这主要用于程序的调试。

 

阅读更多
个人分类: 反汇编
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭