iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
Security

逆向系列 第 12

組合語言基礎筆記 - 暫存器是什麼?

  • 分享至 

  • xImage
  •  

暫存器扮演的角色

資料儲存於主記憶體(RAM)內,處理器 CPU 在計算時,若每次都要從 RAM 拿取資料,速度會非常慢,而暫存器就是 RAM 的 propropromax 版,它位於處理器核心裡,速度比 RAM 快好幾十到上百倍,存取延遲極低,但數量非常有限(一個處理器通常只有幾個到十幾個通用暫存器)。

暫存器的用途

不同的暫存器有不同用途,例如:

  • 算術運算(加減乘除的運算元與結果)
  • 位址存放(指向記憶體的指標)
  • 函數呼叫控制(保存返回位址、函數參數、暫存資料)
  • 堆疊控制(push/pop 的位置追蹤)
  • 暫存中間計算結果(避免反覆存取記憶體)

暫存器在組合語言裡的應用

在組合語言中,幾乎所有指令都是「暫存器之間」或「暫存器與記憶體之間」的操作,例如:

  • 計算:add rax, rbx(把 rbx 的值加到 rax)
  • 資料搬移:mov rax, [rbp-0x8](從記憶體搬一筆資料到 rax)
  • 條件判斷:比較兩個暫存器的值後,決定是否跳轉
  • 函數呼叫:
    • 將參數放到暫存器(例如 rdi, rsi, rdx…)
    • 將返回值放到 rax
    • 使用 rsp / rbp 管理堆疊框架 stack frame

因此沒有暫存器,CPU 幾乎什麼事都做不了。因為必須先把資料放進暫存器才能進行大多數運算,CPU 無法直接對記憶體進行複雜運算,因此我們可以把暫存器看成組合語言的主角。

常見暫存器介紹

x86-64 架構(64 位元)裡,暫存器的名字通常以 r 開頭:

  • 主要運算暫存器:rax(accumulator register)
    用於儲存算術、邏輯操作

  • 通用暫存器:rbx、rcx、rdx

    • rbx(base register)
      基址暫存器

    • rcx(counter register)
      記數暫存器,例如for迴圈的 i

    • rdx(data register)
      用於儲存運算中的額外資料,或與 rax 搭配處理乘法、除法運算的高位部分

  • 堆疊暫存器:

    • rsp(stack pointer)堆疊指標
      • 永遠指向堆疊最上方(最近存入)(最低位址)
      • 由於 stack 是「先進後出」結構(LIFO),因此:
        • 進行 push:將暫存器的資料放入 stack ,rsp 的值減少
        • 進行 pop:將資料從 stack 取出至暫存器,rsp 的值增加
    • rbp(base pointer)基底指標
      • 在函數開始時,會被設定為當前 rsp 的值
      • 固定指向函數 堆疊框架(stack frame)的位置(位址通常高於 rsp)
      • 常使用設定 rbp 的位址
        push rbp        ; 保存舊的 rbp
        mov  rbp, rsp   ; 設定新的基底位置
        

上一篇
逆向題目練習(三)
下一篇
組合語言筆記 - 常見工具
系列文
逆向30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言