通過VC學習反彙編 彙編初步

2021-06-01 00:52:23 字數 2369 閱讀 9785

因工作中經常用到反彙編解一些演算法,故對次有一定的接觸,為了更進一步理解c、c++、vc等他們的特性,記下一些東西,就當自娛自樂了。

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---

dx8位暫存器

---ahal

---bh

bl---

chcl

---dh

dl1.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

1413

1211109

8765

4321

0ofdfif

tfsf

zfaf

pfcf

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

通過VC學習反彙編 函式呼叫 呼叫約定

呼叫約定決定了以下內容 函式引數的壓棧順序 由呼叫者還是被呼叫者平衡堆疊。3.1 cdecl cdecl是c和c 程式的預設呼叫約定 引數通過堆疊來傳遞,從右向左依次入棧,由呼叫者平衡堆疊。同樣的 我們在addint函式前面加上 cdecl呼叫約定 int cdecl addint int a,in...

反彙編 逆向初步 2

逆向初步 1 介紹的是if else語句在反彙編中的事例,現在我們來看看switch case語句在反彙編長啥樣。我們先來看一段簡單的使用switch case語句的程式,其 如下 include main 接下來我們來看它對應的反彙編 如下所示 4 int c 5 00401028 mov dwo...

反彙編 迴圈

includeint main 00401010 55 push ebp 00401011 8bec mov ebp,esp 00401013 83ec 44 sub esp,44 00401016 53 push ebx 00401017 56 push esi 00401018 57 push ...