CPU 通常有兩個重要的暫存器
- 程式計數器
- 堆疊指針
指令週期
- Fetch
- 從記憶體取得指令
- Program counter += 1
- decode
- Execute
Arm
x86/x64
prologue
存好 old ebp 之後,用新的 esp 當 ebp
calling convention
X86 會 alignment 0x10 ,所以你在反組譯的時候會看到 call 之前會先 sub 某個數值(似乎是 GCC 的設計?),之後 push 總和會是 0x10
對於 x32 位元模式必須遵循 System V i386 ABI,在調用前確保 alignment 0x10
前一個 function stack frame 會增加
- 傳入的參數
下一個 function 的 stack frame 存放
- return address
- old ebp
- 最後再分配 local var 的空間
暫存器
-
Segment register
-
Control register
- cr4 register
- page size extension (PSE)
- cr4 register
-
EFLAGs
- OF overflow 的時候會被 set
- ZF 運算結果為 0 的時候會設置
- CF: 算術進位的時候
-
EBX 會指向 PEB
指令
- load effective address (lea)
- 比如
lea eax, [ebx+16]
會將 eax 設定成ebx+16
這個地址 (類似設定指標地址,而非指標值的概念)
- 比如
參見
各種架構的 opcode
Assembly