1. 程式人生 > >破解入門(一)-----常用暫存器

破解入門(一)-----常用暫存器

1 CPU構成

CPU大體上可以分成以下三部分

1) 算術邏輯部分ALUarithmetic logic unit),用來進行算術和邏輯運算

2) 控制邏輯。

3) 工作暫存器,每個暫存器相當於運算器中的一個儲存單元,但它存取速度快。用來存放運算過程中的需要或得到的各種資訊,包括運算元地址、運算元及運算的中間結果。

計算機中資料儲存方式

        在計算機中,一個二進位制數佔用一位,八位是一個位元組。

        在計算機記憶體中,就是以位元組為單位來儲存資訊的。計算機給每一個位元組單元分配一個唯一的儲存器地址,稱為實體地址。當需要訪問相應的記憶體的資料時,就是通過這個地址。

一個二進位制可以表達所有的ASCII,即一個記憶體單元可以儲存一個英文字元或數字等。而中文要用Unicode表示,也就是需要兩個位元組單元才能裝一個漢字。

        十六位就是兩個位元組,才能裝一個漢字。三十二位能裝兩個漢字叫做雙字。六十四位能裝四個漢字叫做四字。

基本暫存器

3.1通用暫存器(32位)

        通用暫存器一共有八個:EAXEBXECXEDXESPEBPEDIESI

        其中EAXEBXECXEDX稱為資料暫存器,用於存放計算過程中所用運算元、結果或其他資訊。除了直接訪問外,還可分別對其高十六位和低十六位,它們的低十六位就是把它們前邊兒的E

去掉,即EAX的低十六位就是AX。而且它們的低十六位又可以分別進行八位訪問,也就是說,AX還可以再進行分解,即AX還可分為AH(高八位)AL(低八位)。

16

EAX 高8位(AH

16位(AX

8位(AL

則操作32位數時可用:MOV EAX

則操作16位數時可用:MOV AX

則操作8位數時可用: MOV AH / MOV AL

備註:從386以後,所有暫存器都可以用來儲存記憶體地址。在破解的時候是不是看到過[EBX]這樣的形式呢?這就是說此時EBX中裝的是一個記憶體地址,而真正要訪問的,就是那那個記憶體單元中所儲存的值

        ESPEBPEDIESI四個暫存器

主要用途就是在儲存器定址時,提供偏移地址。因此,它們可以稱為指標或變址暫存器。

        ESP稱為堆疊指標寄存器。堆疊是以後進先出方式工作的一個儲存區,它必須存在於堆疊段中,因而其段地址存放於SS暫存器中。它只有一個出入口,所以只有一個堆疊指標暫存器。ESP的內容在任何時候都指向當前的棧頂。

                                        

當向堆疊中壓入資料時,ESP會向上移動,使用PUSH指令,ESP變化為:ESP - 資料位數。

當向堆疊中壓出資料時,ESP會向下移動,使用POP指令,ESP變化為:ESP + 資料位數

EBP,它稱為基址指標暫存器,它們都可以與堆疊段暫存器SS聯用來確定堆疊中的某一儲存單元的地址,ESP用來指示段頂的偏移地址,而EBP可作為堆疊區中的一個基地址以便訪問堆疊中的資訊。

ESI(源變址暫存器)和EDI(目的變址暫存器)一般與資料段暫存器DS聯用,用來確定資料段中某一儲存單元的地址。這兩個變址暫存器有自動增量和自動減量的功能,可以很方便地用於變址。在串處理指令中,ESIEDI作為隱含的源變址和目的變址暫存器時,ESIDS聯用,EDI和附加段ES聯用,分別達到在資料段和附加段中定址的目的。

3.2 專用暫存器

        專用暫存器,有兩個,一個是EIP,一個是FLAGS

        EIP算是所有暫存器中最重要的一個了。它的意思就是指令指標暫存器,它用來存放程式碼段中的偏移地址。在程式執行的過程中,它始終指向下一條指令的首地址。它與段暫存器CS聯用確定下一條指令的實體地址。當這一地址送到儲存器後,控制器可以取得下一條要執行的指令,而控制器一旦取得這條指令就馬上修改EIP的內容,使它始終指向下一條指令的首地址。可見,計算機就是用EIP暫存器來控制指令序列的執行流程的。 那些跳轉指令,就是通過修改EIP的值來達到相應的目的的。

FLAGS,標誌暫存器,又稱PSW(program status word),即程式狀態暫存器。這一個是存放條件標誌碼、控制標誌和系統標誌的暫存器。

下面有個例子 
Cmp EAX,EBX  ;EAXEBX相減 
JNZ 00470395   ;不相等的話,就跳到這裡
這兩條指令很簡單,就是用EAX暫存器裝的數減去EBX暫存器中裝的數。來比較這兩個數是不是相等,當Cmp指令執行過後,就會在FLAGSZFzero flag)零標誌位上置相應值,如果結果為0,也就是他們兩個相等的話,ZF1,否則置0。其它還有OF(溢位標誌)SF(符號標誌)CF(進位標誌)AF(輔助進位標誌)PF(奇偶標誌)等。 

3.3 段暫存器

        段暫存器一共六個,分別是CS程式碼段,DS資料段,ES附加段,SS堆疊段,FS以及GS這兩個還是附加段。