1. 程式人生 > >匯編之 eax, ebx, ecx, edx, esi, edi, ebp, esp??

匯編之 eax, ebx, ecx, edx, esi, edi, ebp, esp??

後繼 sso 允許 暫存 不能 框架 proc 調用 邊界

一般寄存器:AX、BX、CX、DX
AX:累積暫存器,BX:基底暫存器,CX:計數暫存器,DX:資料暫存器

索引暫存器:SI、DI
SI:來源索引暫存器,DI:目的索引暫存器

堆疊、基底暫存器:SP、BP
SP:堆疊指標暫存器,BP:基底指標暫存器

EAX、ECX、EDX、EBX:為ax,bx,cx,dx的延伸,各為32位元
ESI、EDI、ESP、EBP:為si,di,sp,bp的延伸,32位元

eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 匯編語言中CPU上的通用寄存器的名稱,是32位的寄存器。如果用C語言來解釋,可以把這些寄存器當作變量看待。

比方說:add eax,-2 ; //可以認為是給變量eax加上-2這樣的一個值。

這些32位寄存器有多種用途,但每一個都有“專長”,有各自的特別之處。

EAX 是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。

EBX 是"基地址"(base)寄存器, 在內存尋址時存放基地址。

ECX 是計數器(counter), 是重復(REP)前綴指令和LOOP指令的內定計數器。

EDX 則總是被用來放整數除法產生的余數。

ESI/EDI分別叫做"源/目標索引寄存器"(source/destination index),因為在很多字符串操作指令中, DS:ESI指向源串,而ES:EDI指向目標串.

EBP是"基址指針"(BASE POINTER), 它最經常被用作高級語言函數調用的"框架指針"(frame pointer). 在破解的時候,經常可以看見一個標準的函數起始代碼:
  
  push ebp ;保存當前ebp
  mov ebp,esp ;EBP設為當前堆棧指針
  sub esp, xxx ;預留xxx字節給函數臨時變量.
  ...
  
  這樣一來,EBP 構成了該函數的一個框架, 在EBP上方分別是原來的EBP, 返回地址和參數. EBP下方則是臨時變量. 函數返回時作 mov esp,ebp/pop ebp/ret 即可.

ESP 專門用作堆棧指針,被形象地稱為棧頂指針,堆棧的頂部是地址小的區域,壓入堆棧的數據越多,ESP也就越來越小。在32位平臺上,ESP每次減少4字節。

386部分寄存器:

狀態和控制寄存器組除了EFLAGS、EIP ,還有四個32位的控制寄存器,它們是CR0,CR1,CR2和CR3。

這幾個寄存器中保存全局性和任務無關的機器狀態。

CR0中包含了6個預定義標誌,0位是保護允許位PE(Protedted Enable),用於啟動保護模式,如果PE位置1,則保護模式啟動,如果PE=0,則在實模式下運行。1位是監控協處理位MP(Moniter coprocessor),它與第3位一起決定:當TS=1時操作碼WAIT是否產生一個“協處理器不能使用”的出錯信號。第3位是任務轉換位(Task Switch),當一個任務轉換完成之後,自動將它置1。隨著TS=1,就不能使用協處理器。CR0的第2位是模擬協處理器位 EM (Emulate coprocessor),如果EM=1,則不能使用協處理器,如果EM=0,則允許使用協處理器。第4位是微處理器的擴展類型位ET(Processor Extension Type),其內保存著處理器擴展類型的信息,如果ET=0,則標識系統使用的是287協處理器,如果 ET=1,則表示系統使用的是387浮點協處理器。CR0的第31位是分頁允許位(Paging Enable),它表示芯片上的分頁部件是否允許工作。

CR1是未定義的控制寄存器,供將來的處理器使用。

CR2是頁故障線性地址寄存器,保存最後一次出現頁故障的全32位線性地址。

CR3是頁目錄基址寄存器,保存頁目錄表的物理地址,頁目錄表總是放在以4K字節為單位的存儲器邊界上,因此,它的地址的低12位總為0,不起作用,即使寫上內容,也不會被理會。

這幾個寄存器是與分頁機制密切相關的,因此,在進程管理及虛擬內存管理中會涉及到這幾個寄存器,讀者要記住CR0、CR2及CR3這三個寄存器的內容。


esp:寄存器存放當前線程的棧頂指針
ebp:寄存器存放當前線程的棧底指針

eip:寄存器存放下一個CPU指令存放的內存地址,當CPU執行完當前的指令後,從EIP寄存器中讀取下一條指令的內存地址,然後繼續執行。

參考:http://www.cnblogs.com/qq78292959/archive/2012/07/20/2600865.html

匯編之 eax, ebx, ecx, edx, esi, edi, ebp, esp??