1. 程式人生 > >轉載:匯編語言裏 eax, ebx, ecx, edx, esi, edi, ebp, esp這些都是什麽意思啊?

轉載:匯編語言裏 eax, ebx, ecx, edx, esi, edi, ebp, esp這些都是什麽意思啊?

指針 標識 ati des 通用 很多 lin 返回 sub

匯編語言裏 eax, ebx, ecx, edx, esi, edi, ebp, esp這些都是什麽意思啊?

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 (Extended stack pointer)專門用作堆棧指針,被形象地稱為棧頂指針,堆棧的頂部是地址小的區域,壓入堆棧的數據越多,ESP也就越來越小。在32位平臺上,ESP每次減少4字節。

  ESP為棧指針,用於指向棧的棧頂(下一個壓入棧的活動記錄的頂部),而EBP為幀指針,指向當前活動記錄的底部。   棧指針與幀指針標識出了當前活動記錄的位置。   當函數被調用的時候,執行如下操作:   ⒈將幀指針壓入棧中:push ebp   ⒉用ebp保存當前棧指針:mov esp,ebp   ⒊使得棧指針自減,自減得到的內存應當能夠被用來存儲被調用函數的本地狀態:sub esp,0CCh

386部分寄存器:

技術分享圖片

轉載:https://blog.csdn.net/lincyang/article/details/5441066

轉載:匯編語言裏 eax, ebx, ecx, edx, esi, edi, ebp, esp這些都是什麽意思啊?