iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0
Security

我逆向你逆向我的逆向工程膩系列 第 4

Dx04 - 基礎組語觀念

  • 分享至 

  • xImage
  •  

複習

在逆向工程的時候會使用很多觀念,首先得複習一下。

IA-32 Register

暫存器,CPU 內部存放資料的一個小空間。雖然可存放空間很小,但是他在 CPU 內部而且讀寫的速度極快,使它足以勝任機器上最接近處裡指令的記憶體

IA-32 中,有四種基本暫存器 :

  • 通用暫存器 : 8個 32bit
  • Segment 暫存器 : 6個 16bit
  • 指令指針暫存器 : 1個 32bit
  • FLAG 暫存器 : 1個 32bit

https://ithelp.ithome.com.tw/upload/images/20220918/20135675spkAhZXLTp.png

暫存器介紹 :

  • 通用暫存器 : 用來做通用計算的暫存器,可以參與計算或儲存。都是 32 bit , 又可以分成更多獨立暫存器來讀寫指定的位元,如下圖 :

https://ithelp.ithome.com.tw/upload/images/20220918/20135675ExBj8uf7wz.png

而 64 位元架構中,0~63 bit 名稱為 RAX。在各種通用暫存器中有部分常作為特定功用 :

  1. EAX : 累加器,也常用為函數返回值
    2. EBX : Base Address 之位置暫存。
    3. ECX : 計數器,使用 loop 時會減一。
    4. EDX : I / O 數據暫存器,常用來存除法的餘數。
    5. EBP : Stack base 指針
    6. ESI : 原點位置暫存器
    7. EDI : 目的位置暫存器
    8. ESP : Stack top 指針

EBP ESP 是用來存 Stack 的位置資訊,可以透過 POP PUSH CALL RET 等操作改變。

ESI EDI 是與特定指令一起使用,主要用於記憶體複製。

? 圖片來自:
http://www.edwardbosworth.com/CPSC2105/Lectures/Slides_06/Chapter_07/Pentium_Architecture.htm

  • EFLAGS
    這個暫存器裡面可以分成很多 FLAG,其中重要的有三個 flag :

    1. ZF : 若運算結果為 0 ,則值為 1,否則為0。
    2. OF : 當有號數 Overflow 時,值為 1,若是最高為有效位元改變也會使其變成1。
    3. CF : 當無號數 Overflow 時,值為 1。
  • EIP
    指向現在的指令應該要做到哪裡,不能直接修改,但是可以透過指令間接修改 ( 如 : JMP , CALL )。

  • Segment 暫存器
    首先,segment 是一種記憶體保護措施。把記憶體化為多個區塊,區塊附上起始位置、範圍、存取權限等資料,這些紀錄放在 SDT ( segment descriptor table ) 上,而暫存器的值就是這個表上的索引

    1. CS : 代碼段基址
    2. SS : Stack基址
    3. DS : 數據段基址
    4. ES、FS、GS : 附加段基址

https://ithelp.ithome.com.tw/upload/images/20220918/20135675vVSWxV3idA.png

? 圖片來自:
https://programmerprodigy.code.blog/2020/01/30/architecture-and-programming-model-of-8086/

Byte Ordering

字節序 Byte Order 或稱 端序 Endianness,就是指位元組的排列順序,其中大致分成 :

範例 : 0x12345678

  • 大端序 : 12 34 56 78
  • 小端序 : 78 56 34 12

注意 : 當存字串的時候就只是 char 存在 string 中,並以 \0 做結尾 :

範例 : "abcde”

  • 大端序 : 61 62 63 64 65 00
  • 小端序 : 61 62 63 64 65 00

盡管大端序看起來十分直觀,但是 x86 CPU 是使用小端序,這使他的運算與拓展較為快速

Stack

Stack 在程序中有以下功能 :

  • 暫時保存局部變數
  • 調用函數時傳遞參數
  • 保存函數返回後的位置

在記憶體中,Stack由下往上長高的,若裡面沒有東西,ESP 會回到底部。


上一篇
Dx03 - “Hello World!”
下一篇
Dx05 - 密碼藏在記憶體 !
系列文
我逆向你逆向我的逆向工程膩31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言