## 2.1 通用 CPU 寄存器
CPU 的寄存器能夠對少量的數據進行快速的存取訪問。在 x86 指令集里,一個 CPU 有 八個通用寄存器:EAX, EDX, ECX, ESI, EDI, EBP, ESP 和 EBX。還有很多別的寄存器,遇 到的時候具體講解。這八個通用寄存器各有不同的用途,了解它們的作用對于我們設計調試 器是至關重要的。讓我們先簡略的看一看每個寄存器和功能。最后我們將通過一個簡單的實 驗來說明他它們的使用方法。
EAX 寄存器也叫做累加寄存器,除了用于存儲函數的返回值外也用于執行計算的 操作。許多優化的 x86 指令集都專門設計了針對 EAX 寄存器的讀寫和計算指令。列如從最 基本的加減,比較到特殊的乘除操作都有專門的 EAX 優化指令。
前面我們說了,函數的返回值也是存儲在 EAX 寄存器里。這一點很重要,因為通過返 回的 EAX 里的值我們可以判斷函數是執行成功與否,或者得到確切返回值。
EDX 寄存器也叫做數據寄存器。這個寄存器從本質上來說是 EAX 寄存器的延伸, 它輔助 EAX 完成更多復雜的計算操作像乘法和除法。它雖然也能當作通用寄存器使用,不 過更多的是結合 EAX 寄存器進行計算操作。
ECX 寄存器,也叫做計數寄存器,用于循環操作,比如重復的字符存儲操作,或 者數字統計。有一點很重要,ECX 寄存器的計算是向下而不是向上的(簡單理解就是用于 循環操作時是由大減到小的)。
看一下下面的 Python 片段:
```
counter = 0
while counter < 10:
print "Loop number: %d" % counter
counter += 1
```
如果你把這代碼轉化成匯編代碼,你會看到第一輪的時候 ECX 將等于 10,第二輪 的時候等于 9,如此反復知道 ECX 減少到 0。這很容易讓人困惑,因為這和 Python 的循環 剛好代碼相反,但是只要記得 ECX 是向下計算的就行了。
在 x86 匯編里,依靠 ESI 和 EDI 寄存器能對需要循環操作的數據進行高效的處理。 ESI 寄存器是源操作數指針,存儲著輸入的數據流的位置。EDI 寄存器是目的操作數指針, 存儲了計算結果存儲的位置。簡而言之,ESI(source index)用于讀,EDI(destination index) 用于寫。用源操作數指針和目的操作數指針,極大的提高了程序處理數據的效率。
ESP 和 EBP 分別是棧指針和基指針。這兩個寄存器共同負責函數的調用和棧的操 作。當一個函數被調用的時候,函數需要的參數被陸續壓進棧內最后函數的返回地址也被壓 進。ESP 指著棧頂,也就是返回地址。 EBP 則指著棧的底端。有時候,編譯器能夠做出優 化,釋放 EBP,使其不再用于棧的操作,只作為普通的寄存器使用。
EBX 是唯一一個沒有特殊用途的寄存器。它能夠作為額外的數據儲存器。 還有一個需要提及的寄存器就是 EIP。這個寄存器總是指向馬上要執行的指令。當 CPU 執行一個程序的成千上萬的代碼的時候,EIP 會實時的指向當前 CPU 馬上要執行到的位置。
一個調試器必須能夠很方便的獲取和修改這些寄存器的內容。每一個操作系統都提供 了一個接口讓調試器和 CPU 交互,以便能夠獲取和修改這些值。我們將在后面的操作系統 章節詳細的單獨的講解。
- 序
- 1 搭建開發環境
- 1.1 操作系統準備
- 1.2 獲取和安裝 Python2.5
- 1.3 配置 Eclipse 和 PyDev
- 2 調試器設計
- 2.1 通用 CPU 寄存器
- 2.2 棧
- 2.3 調試事件
- 2.4 斷點
- 3 自己動手寫一個 windows 調試器
- 3.2 獲得 CPU 寄存器狀態
- 3.3 實現調試事件處理
- 3.4 全能的斷點
- 4 PyDBG---純 PYTHON 調試器
- 4.1 擴展斷點處理
- 4.2 處理訪問違例
- 4.3 進程快照
- 5 IMMUNITY----最好的調試器
- 5.1 安裝 Immunity 調試器
- 5.2 Immunity Debugger 101
- 5.3 Exploit 開發
- 5.4 搞定反調試機制
- 6 HOOKING
- 6.1 用 PyDbg 實現 Soft Hooking
- 6.2 Hard Hooking
- 7 Dll 和代碼注入
- 7.1 創建遠線程
- 7.2 邪惡的代碼
- 8 FUZZING
- 8.1 Bug 的分類
- 8.2 File Fuzzer
- 8.3 改進你的 Fuzzer
- 9 SULLEY
- 9.1 安裝 Sulley
- 9.2 Sulley primitives
- 9.3 獵殺 WarFTPD
- 10 Fuzzing Windows 驅動
- 10.1 驅動通信
- 10.2 用 Immunity fuzzing 驅動
- 10.4 構建 Driver Fuzzer
- 11 IDAPYTHON --- IDA 腳本
- 11.1 安裝 IDAPython
- 11.2 IDAPython 函數
- 11.3 腳本例子
- 12 PyEmu
- 12.1 安裝 PyEmu
- 12.2 PyEmu 一覽
- 12.3 IDAPyEmu