近期在學習計算機體系結構安全方向,不得不使用彙編**, 對於經常使用的一些常見彙編**給予一定的解釋。(稍後,再繼續新增)
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, *** ;預留***位元組給函式臨時變數.
… 這樣一來,ebp 構成了該函式的乙個框架, 在ebp上方分別是原來的ebp, 返回位址和引數. ebp下方則是臨時變數. 函式返回時作 mov esp,ebp/pop ebp/ret 即可.
esp 專門用作堆疊指標,被形象地稱為棧頂指標,堆疊的頂部是位址小的區域,壓入堆疊的資料越多,esp也就越來越小。在32位平台上,esp每次減少4位元組。
386一部分暫存器示例如下:
組合語言一些暫存器的作用
首先,需要了解c語言中組合語言裡eax,ebx,ecx,edx,ebp,edi,esi mov,sub,add,jmp,jn,test push,pop,call,ret,lea 這些都是什麼意思。eax,ebx,ecx,edx,esi,edi,dbp.都是x86組合語言中cpu上的通用暫存器的名稱...
組合語言(一)
8086暫存器都是16位的暫存器,根據用途可分為4種型別。分別是資料暫存器 位址暫存器 段暫存器和控制暫存器。如圖所示 資料暫存器中每個暫存器又可以分為2個8位的暫存器。分別為ah al,bh bl,ch cl,dh dl。h表示高位元組 高8位 暫存器 l表示低位元組 低8位 暫存器。例如 用ax...
組合語言(一)
每一種微處理器都有自己的機器指令集 組合語言 由於很長的1與0難以辨別與記憶,所以誕生組合語言操作 暫存器bx的內容送到ax中 機器指令 1000100111011000 彙編指令 mov ax,bx組合語言由彙編指令,偽指令,其他符號 後兩者都不對應機器碼 分別對應 機器碼的助記符,編譯器執行,由...