banner
lca

lca

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

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

image

3.2 寄存器#

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

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

image

image

  • EAX (accumulator, 累加器):EAX 常用於四則運法以及一些格式化指令。
  • EBX (Base index, 基址寄存器):EBX 常用於存儲起始內存地址。
  • ECX (counter, 計數器):ECX 用於多種指令的計數器。同時也存儲內存數據的地址偏移。使用計數器的指令包括字符串指令、偏移指令、移位指令以及循環。
  • EDX (data):EDX 通常用於存儲乘積的部分位數以及除法的餘數,同時也能存儲起始內存地址。
  • EBP (base pointer):EBP 指向一個內存地址,主要作為一個函數中的參數以及變量的基址。
  • EDI (destination index):EDI 常用於字符串指令,指向目標字符串。
  • ESI (source index):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 Low8-bit Highcomment
RAXEAXAXALAH
RBXEBXBXBLBH
RCXECXCXCLCH
RDXEDXDXDLDH
RSIESISISIL-
RDIEDIDIDIL-
RBPEBPBPBPL-base pointer
RSPESPSPSPL-stack pointer
R8R8DR8WR8B-
R9R9DR9WR9B-
R10R10DR10WR10B-
R11R11DR11WR11B-
R12R12DR12WR12B-
R13R13DR13WR13B-
R14R14DR14WR14B-
R15R15DR15WR15B-
RIPEIPIP--
RFLAGSEFLAGSFLAGS--

寄存器與子寄存器

image

Data TypeSize(Bits)Typical Use
Byte8Characters,small integers
Word16Characters,integers
Doubleword32Integers,single-precision floating-point
Quadword64Integers,double-precision floating-point
Double Quadword128Packed integers,packed floating-point

基礎數據類型及內存佔用

3.3 MOV 指令#

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

MOV EAX, EDI

image

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

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

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