通過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進入單步方式。所謂單步方式是指在一條指令執行後,產生一個單步中斷,這主要用於程序的調試。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章