最近沉迷手遊,感覺抽卡出貨率太坑,含淚棄之;轉戰單機遊戲,通關一遍後想體驗開金手指的快感。別人做的修改器沒意思,於是想自己試試。做這個筆記的同時希望也能對對此感興趣的朋友們有所幫助。
進入正題。
首先是暫存器的分類:
·通用暫存器
·變址暫存器
·指標暫存器
·段暫存器
·指令指標暫存器
·標誌暫存器
(一些暫存器可以作為通用暫存器;還有一些不行,比如標誌暫存器)
通用暫存器:eax、ebx、ecx、edx
·eax累加器(accumulator):累加器可用於乘、除、輸入/輸出等操作,它們的使用頻率很高
·ebx基位址暫存器(base register):可用來儲存指標等內容
·ecx計數暫存器(count register):在迴圈和批量字串操作時,要用它來控制迴圈次數
·edx資料暫存器(data register):在進行乘、除運算時,它作為預設的運算元參與運算,也用於存放i/o的埠位址
·補充說明:資料暫存器主要用來儲存參與運算的數(運算元)和運算結果等資訊
變址暫存器:esi、edi
·esi——源變址暫存器,edi——目的變址暫存器
·主要用於:存放資料在記憶體中的偏移量,用來訪問儲存在記憶體中的資料,一般與字串批量操作有關,例如:將記憶體中的乙個字串複製到記憶體中的另外乙個位置
·可以作為通用暫存器
·在字串批量處理指令中,esi用作源位元組串位址;edi用作目的位元組串位址,這是有明確定義的,不能搞混
指標暫存器:esp、ebp
·這兩個暫存器與棧相關
·棧被劃分為乙個個大小不一的棧幀
·esp棧指標暫存器(extended stack pointer):存放乙個指標,該指標永遠只想棧最上面乙個棧幀的棧頂
·ebp基址指標暫存器(extended base pointer):其內存放乙個指標,該指標永遠指向棧最上面
乙個棧幀的底部
段暫存器:cs、ss、ds、es、fs、gs
·段暫存器的產生源於intel 8086 cpu體系結構中資料匯流排與位址匯流排的寬度不一致(其原因受制於當時的工藝,資料匯流排的寬度小於位址匯流排的的寬度,即單個暫存器所能找到的記憶體位址範圍小於實際的記憶體位址範圍,為了解決這個問題,產生了段暫存器)
·類似固話需要新增區號:用乙個暫存器表示訪問的區域,另乙個暫存器去找具體位置
指令指標暫存器:eip
·用來儲存cpu要讀取指令的位址,cpu通過eip暫存器所指示的位置讀取即將要執行的指令。每次cpu執行完響應的彙編指令後,eip暫存器的值就會自動增加
·eip是乙個很重要的暫存器,它控制了cpu下一步要執行哪一條命令,因此為了計算機的安全,eip無法通過mov等指令修改,只能通過jmp、call等指令進行修改
·在系統漏洞發掘過程中,要證明乙個漏洞可用,基本的方法就是控制eip使其能夠只想自己提供的**,劫持系統的正常執行流程
標誌暫存器:eflags
·主要用於反應處理器的狀態和指令運算結果的某些特徵
·進製標誌(cf):用於反映運算是否產生進製或借位。如果運算結果的最高位產生乙個僅為或借位,則cf置1,否則置0
·零標誌(zf):用於判斷結果是否為0。運算結果0,zf置1,否則置0
·溢位標誌(of):反映有符號數加減運算是否溢位。如果運算結果超過了有符號數的表示範圍,則of置1,否則置0
逆向工程 暫存器
eax暫存器被稱為累加器,用於常見的運算操作和傳遞函式呼叫返回值,加減法 比較法 會借助eax暫存器 乘除法必須在eax暫存器 可以基於eax中的儲存值來判斷函式呼叫的操作是否成功 可以是布林值也可以是數值 edx 可被認為是eax的延伸部分,和eax一起使用來協助執行複雜運算 ecx 計數器用於支...
暫存器知識
一般暫存器 ax bx cx dx ax 累積暫存器,bx 基底暫存器,cx 計數暫存器,dx 資料暫存器 索引暫存器 si di si 索引暫存器,di 目的索引暫存器 堆疊 基底暫存器 sp bp sp 堆疊指標暫存器,bp 基底指標暫存器 eax ecx edx ebx 為ax,bx,cx,d...
一 二章 彙編知識整理之基礎知識,暫存器
機器語言其實就是和機器交流的語言,是機器指令的集合,機器指令可以控制計算機的一系列的命令。它是一系列二進位制語言,計算機將其轉化為一系列高低電平,來驅動計算機的電器器件,從而達到某些功能。由於機器語言是一堆二進位制語言,可讀性非常差,所以出現了組合語言,目的是為了更好的閱讀還有書寫 1.彙編指令 機...