banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

《從零開始學IDA逆向》學習筆記-3(寄存器)

image

3.2 寄存器#

比如说 ADD (加法) 指令,两个内存中的数就无法直接相加,处理器必须将其中一个数传输到寄存器中,再加上另一个内存地址中的数。

32 位通用寄存器有:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI 和 EIP。

image

image

  • EAX (累加器):EAX 常用於四則運法以及一些格式化指令。
  • EBX (基址寄存器):EBX 常用於存儲起始內存地址。
  • ECX (計數器):ECX 用於多種指令的計數器。同時也存儲內存數據的地址偏移。使用計數器的指令包括字符串指令、偏移指令、移位指令以及循環。
  • EDX (數據):EDX 通常用於存儲乘積的部分位數以及除法的餘數,同時也能存儲起始內存地址。
  • EBP (基指針):EBP 指向一個內存地址,主要作為一個函數中的參數以及變量的基址。
  • EDI (目標索引):EDI 常用於字符串指令,指向目標字符串。
  • ESI (源索引):ESI 常用於字符串指令,指向初始字符串。
  • EIP:存儲即將執行的下一條指令的地址。
  • ESP:存儲棧頂地址。

思維腦圖如下:

image

image

對於 EBX 有 BX、BH 和 BL 子寄存器,對於 ECX 有 CX、CH 和 CL 子寄存器,對於 EDX 有 DX、DH 和 DL 子寄存器。其他通用寄存器的 9~16 位沒有命名也無法直接獲取內容。

最基本的是 BYTE 佔用 1 個字節 (8 bit) 內存,WORD 佔用 2 個字節 (16 bit) 內存,DWORD 佔用 4 個字節 (32bit) 內存、QWORD 佔用 8 個字節 (64 bit) 內存。

64-bit32-bit16-bit8-bit 低位8-bit 高位註解
RAXEAXAXALAH
RBXEBXBXBLBH
RCXECXCXCLCH
RDXEDXDXDLDH
RSIESISISIL-
RDIEDIDIDIL-
RBPEBPBPBPL-基指針
RSPESPSPSPL-棧指針
R8R8DR8WR8B-
R9R9DR9WR9B-
R10R10DR10WR10B-
R11R11DR11WR11B-
R12R12DR12WR12B-
R13R13DR13WR13B-
R14R14DR14WR14B-
R15R15DR15WR15B-
RIPEIPIP--
RFLAGSEFLAGSFLAGS--

寄存器與子寄存器

image

數據類型大小 (位元)典型用途
Byte8字符,小整數
Word16字符,整數
Doubleword32整數,單精度浮點數
Quadword64整數,雙精度浮點數
Double Quadword128打包整數,打包浮點數

基礎數據類型及內存佔用

3.3 MOV 指令#

數據傳輸指令 MOV: 將其始操作單元 (src) 的內容複製到目標單元 (dest) 。

MOV EAX, EDI

image

大部分情況下,我們可以在寄存器間直接傳輸,但是 EIP 寄存器無法被直接賦值或者讀取。例如MOV EIP, EAX這個指令就是非法的。

IDA 中,地址前面有OFFSET這個詞時,指代的是這個地址本身的數值,而沒有OFFSET這個詞時,指代的是這個地址上存儲的內容。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。