5.IA-32寄存器
寄存器(Register)是CPU內部用來存放數據的一些小型存儲區域,它與RAM(Random?Access?Memory,隨機存儲器、內存)略有不同。CPU訪問(Access)RAM中的數據時要經過較長的物理路徑,所以花費的時間要長一些;而寄存器集成在CPU內部,擁有非常高的讀寫速度。
IA-32是英特爾推出的32位元架構,屬于復雜的指令集架構,提供非常多的功能,并且支持多種寄存器。IA-32支持的寄存器類型:
基本程序運行寄存器
通用寄存器(General?Purpose?Registers?,32位,8個)
段寄存器(Segment?Registers,?16位,6個)
程序狀態與控制寄存器(Program?Status?and?Control?Registers?,32位,1個)
指令指針寄存器(Instruction?Pointer?,32位,1個)
?
?
1.通用寄存器
通用寄存器是一種通用型的寄存器,用于傳送和暫存數據,也可參與算數邏輯運算,并保存運算結果。IA-32中每個通用寄存器的大小都是32位,即4個字節,主要用來保存常量與地址等,由特定匯編指令操作特定寄存器。除常規用途外,某些寄存器還具有一些特殊功能:
?
EAX:(針對操作數和結果數據的)累加器
EBX:(DS段中的數據指針)基址寄存器
ECX:(字符串和循環操作的)計數器
EDX:(I/O指針)數據寄存器
以上4個寄存器主要用在算數運算(ADD、SUB、XOR、OR等)指令中,常常用來保存常量與變量的值。
此外,ECX與EAX也可以用于特殊用途。循環指令(LOOP)中,EXC用來循環計數(loop?count),每執行一次循環,ECX都會減1。EAX一般用在函數回值中,所有Win32API函數都會先把返回值保存到EAX再返回。
注意:
編寫Windows匯編程序時,Win32API函數在內部會使用ECX與EDX,調用這些API時,ECX與EDX的值就會改變。所以,ECX與EDX中保存有重要數據時,調用API前要先把這些數據備份到其他寄存器或棧。
通用寄存器中其他幾個寄存器的名稱如下所示。
????EBP:(SS段中棧內數據指針)擴展基址指針寄存器<棧針>。
????ESI:(字符串操作源指針)源變地寄存器。
????EDI:(字符串操作目標指針)目的變址寄存器。
????ESP:(SS段中棧指針)棧指針寄存器。
以上4個寄存器主要用作保護內存地址的指針。
????ESP只是棧區域的棧頂地址,某些指令(PUSH、POP、CALL、RET)可以直接用來操作ESP(棧區域管理是程序中相當重要的部分,不要把ESP用作其他用途)。
????EBP表示棧區域的基地址,函數被調用時保存ESP的值,函數返回時再把值返回ESP。保證棧不會崩潰(這稱為棧幀(Stack?Frame)技術,它是代碼逆向分析技術中的一個重要概念)ESI和EDI與特定指令(LODS、STOS、REP、MOVS等)一起使用,只要用于內存復制。
2.段寄存器
IA-32的保護模式中,段是一種內存保護技術,它把內存劃分為多個區域,并為每個區域賦予其實地址、范圍、訪問權限等,以保護內存。此外,它還同分頁技術一起用于將虛擬內存變更為實際物理內存。段內存記錄在SDT中,而段寄存器就持有這些SDT的索引(index)。共6種寄存器,分別為CS、SS、DS、ES、FS、GS,每個寄存器的大小為16位,即2個字節。另外,每個段寄存器指向的段描述符與虛擬內存結合,形成一個線性地址(Linear?Address),借助分頁技術,線性地址最終被轉換為實際的物理地址。
?
3.程序狀態與控制寄存器
EFLAGS:Flag?Register,標志寄存器
IA-32中標志寄存器的名稱為EFLAGS,其大小為4個字節(32位),由原來的16位FLAGS寄存器擴展而來。
EFLAGS寄存器的每位都有意義,每位的值或為1或為0,代表On/Off或者True、False。其中有些位由系統直接設定,有些則根據程序命令的執行結果設置。
ZF:若運算結果為0,則其值為1,否則為0。
OF:有符號整數溢出時,OF值被置為1。此外,MSB改變時,其值也被設為1。
CF:無符號整數溢出時,其值為1。
4.指令寄存器
EIP:Instruction?Pointer,指令指針寄存器
指令指針寄存器保存著CPU要執行的地址,大小為32位(4字節),由原16位IP寄存器擴展而來。程序運行時,CPU會讀取EIP中一條指令的地址,傳送指令地址到指令緩沖區后,EIP寄存器的值自動增加,增加的到校即是讀取指令的字節大小。這樣,CPU每次執行完一條指令,就會通過EIP寄存器讀取并執行下一條指令。(EIP無法被直接修改,只能通過其他指令如JMP、Jcc、CALL、RET等指令間接修改)。
?
?
?
總結
以上是生活随笔為你收集整理的5.IA-32寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。