iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0
Security

逆向系列 第 20

組合語言筆記 - Endian

  • 分享至 

  • xImage
  •  

Endian 是什麼?

電腦裡的資料是以 位元組 (Byte) 為單位存放的。當數字很大(例如 32 位元 = 4 個位元組),電腦就得決定哪個位元組要先存。這個存放順序的規則,就叫做 Endian (位元組序)。

常見的兩種 Endian

Big Endian(大端序)

  • 高位元組放在前面,低位元組放在後面。
  • 常用於 網路協議(TCP/IP、UDP)。
  • 為了避免混亂,所有網路協議(如 TCP/IP)規定:一律使用大端序,也叫「Network Byte Order」。

舉例:
假設要存放一個 32-bit (4 bytes) 的整數:0x12345678

拆開後的位元組:

  • 0x12 → 最高位元組 (MSB, Most Significant Byte)
  • 0x34
  • 0x56
  • 0x78 → 最低位元組 (LSB, Least Significant Byte)

大端序存放:

0x12 0x34 0x56 0x78

就像十進位的「1234」:

  • 1 = 千位(最高位數字)
  • 2 = 百位
  • 3 = 十位
  • 4 = 個位(最低位數字)
    大端序存放:
1234

Little Endian(小端序)

  • 低位元組放在前面,高位元組放在後面。
  • 正好和大端序相反。
  • 廣泛應用於 Intel CPU 架構 (x86, x86_64)、大部分 ARM 架構、個人電腦、伺服器與行動裝置。
  • 處理器能夠直接從最小單位開始存取數字,可跳過絕大多數為 0 的高位元組。

舉例:
依舊是同一個數字 0x12345678

小端序存放:

0x78 0x56 0x34 0x12

換句話說,就是把「最低有效位元組」(LSB) 擺在最前面。

簡單對比:

  • 假設要存放 0x00000001
    大端序會依照 01 00 00 00 存放
    小端序會依照 00 00 00 01 存放

  • 假設要存放 0x12345678
    大端序會依照 12 34 56 78 存放
    小端序會依照 78 56 34 12 存放

Big Endian vs Little Endian 優缺點比較

特性 Big Endian Little Endian
概念 高位在前,低位在後 低位在前,高位在後
直覺性 和人類書寫數字方式一致(高位在前) 需要習慣,與人類習慣相反
使用場景 網路傳輸 (Network Byte Order)、部分 RISC CPU Intel x86/x86_64、ARM、日常 PC、手機
存取效率 讀取高位數字較方便 讀取低位數字較方便(處理器運算更有效率)
可讀性 對人類比較直觀 對 CPU 計算比較直觀
跨平台性 常用於跨平台傳輸 常用於本地端運算

上一篇
組合語言筆記 - IDA Free
下一篇
逆向題目練習(五) - Endian 轉換
系列文
逆向30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言