COMP6836001 • RE-CORE

Reverse Engineering

Panduan komprehensif analisis biner x86 dan x64 untuk UTS: arsitektur CPU, register, stack frame, calling convention, hingga rekonstruksi algoritma assembly ke source code bahasa C tingkat tinggi.

📜 Assembly Cheatsheet 📝 10 Soal Latihan ASM→C

🎯 Target Capaian UTS Reverse Engineering

1. Fundamental Arsitektur x86 vs x64

Dalam binary analysis, pemahaman mendalam tentang perbedaan mode 32-bit (IA-32 / x86) dan 64-bit (x86_64 / AMD64) adalah fondasi mutlak. Setiap register pada x64 berukuran 64-bit (8 bytes), sedangkan pada x86 berukuran 32-bit (4 bytes).

Arsitektur x86 (32-bit)

  • Pointer berukuran 4 byte (32-bit addresses).
  • Register utama: EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP, EIP.
  • Passing argumen fungsi mayoritas dilakukan via Stack (kanan ke kiri pada cdecl).
  • Return value integer diletakkan pada register EAX.

Arsitektur x64 (64-bit)

  • Pointer berukuran 8 byte (64-bit addresses).
  • Register diperluas: RAX - R15 (16 general purpose registers).
  • Passing argumen via Register (System V: RDI, RSI, RDX, RCX, R8, R9).
  • Return value diletakkan pada register RAX.

2. Anatomi Stack Frame (Prolog, Body, Epilog)

Stack tumbuh ke bawah (dari alamat memori tinggi ke alamat memori rendah). Ketika suatu fungsi dieksekusi, CPU membentuk sebuah stack frame terlokalisasi:

Struktur Standar Fungsi Assembly x64

x86_64 Assembly
push    rbp              ; Simpan base pointer lama dari pemanggil (caller)
mov     rbp, rsp         ; Tetapkan base pointer baru untuk frame fungsi ini
sub     rsp, 16          ; Alokasikan ruang 16-byte di stack untuk local variables

; --- BODY FUNGSI (Operasi logika, perhitungan lokal) ---
mov     DWORD PTR [rbp-4], 10    ; int x = 10;
mov     DWORD PTR [rbp-8], 20    ; int y = 20;
mov     eax, DWORD PTR [rbp-4]   ; temp = x;
add     eax, DWORD PTR [rbp-8]   ; temp += y;

; --- EPILOG FUNGSI (Restorasi frame & Return) ---
leave                    ; Ekuivalen dengan: mov rsp, rbp; pop rbp;
ret                      ; Pop RIP / return address dan lompat kembali ke pemanggil

⚡ Cek Pemahaman Kilat: Reverse Engineering

Pertanyaan 1 dari 3
Pada arsitektur System V AMD64 (Linux x64), register manakah yang digunakan untuk menampung argumen fungsi pertama dan kedua?
A RDI untuk argumen ke-1, RSI untuk argumen ke-2
B RCX untuk argumen ke-1, RDX untuk argumen ke-2
C RAX untuk argumen ke-1, RBX untuk argumen ke-2
D Stack [ESP+4] dan [ESP+8]