組合語言裡 eax, ebx, ecx, edx, esi, edi, ebp, esp

來源:互聯網
上載者:User

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位元組。

esp:寄存器存放當前線程的棧頂指標
ebp:寄存器存放當前線程的棧底指標
eip:寄存器存放下一個CPU指令存放的記憶體位址,當CPU執行完當前的指令後,從EIP寄存器中讀取下一條指令的記憶體位址,然後繼續執行。

一般寄存器: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位元

棧的基本模型

參數N

↓高地址

參數…

函數參數入棧的順序與具體的調用方式有關

參數 3

參數 2

參數 1

EIP

返回本次調用後,下一條指令的地址

EBP

儲存調用者的EBP,然後EBP指向此時的棧頂。

臨時變數1

 

臨時變數2

 

臨時變數3

 

臨時變數…

 

臨時變數5

↓低地址

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.