Jump to content

Introduction to Assembly: Difference between revisions

From Haidhi Wiki
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 41: Line 41:


= Cara Belajar Assembly (Kalo mau) =
= Cara Belajar Assembly (Kalo mau) =
Banyak kuliahan yang mengajarkan Assembly langsung ngoding pada sebuah text file secara langsung (biasanya ekstensinya .asm). Tapi menurut saya cara ini kurang tepat karena kita akan sulit untuk melihat alur eksekusi program. Solusinya adalah dengan langsung ngoding di software debugger.  Saya sendiri menyarankan menggunakan x64dbg, sayangnya software ini cuma ada di Windows. Cara lain adalah dengan membuat sebuah program C/C++ lalu file executable-nya di-decompile menggunakan software debugger seperti yang saya sebutkan di atas.  
Banyak kuliahan yang mengajarkan Assembly langsung ngoding pada sebuah text file secara langsung (biasanya ekstensinya .asm). Tapi menurut saya cara ini kurang tepat karena kita akan sulit untuk melihat alur eksekusi program. Solusinya adalah dengan langsung ngoding di software debugger.  Saya sendiri menyarankan menggunakan x64dbg, sayangnya software ini cuma ada di Windows. Cara lain adalah dengan membuat sebuah program C/C++ lalu file executable-nya di-decompile menggunakan software debugger seperti yang saya sebutkan di atas. Setelah memahami konsep dasar assembly menggunakan Debugger, baru kita bisa lanjut belajar nulis manual from scratch. Ini berguna untuk membuat shellcode
 
Alasan lain untuk belajar Assembly menggunakan debugger adalah karena kita juga mau belajar reverse engineering dan malware analysis; jadi sekalian belajar tools terkait. Beda cerita kalo kita mau buat OS sendiri atau buat game semacam Roller Coaster Tycoon.


Berikut software dan tools umum yang bisa digunakan untuk debugging sekaligus reverse engineering:
Berikut software dan tools umum yang bisa digunakan untuk debugging sekaligus reverse engineering:
Line 56: Line 54:
Lanjut:
Lanjut:
[[Belajar Assembly di x64dgb]]
[[Belajar Assembly di x64dgb]]
== Baca Juga ==
* [[Tahap-tahap dari source code menjadi executable file]]

Latest revision as of 08:07, 11 April 2025

Assembly language adalah bahasa pemrograman tingkat rendah yang langsung berinteraksi dengan processor. Bahasa ini bersifat processor-dependent yang artinya setiap arsitektur prosesor memiliki instruksinya masing-masing, tapi secara konsep logika pemrogramannya SAMA SEMUA. Ibarat python dan javascript adalah dua bahasa yang berbeda, tapi memiliki konsep yang sama seperti variabel, loop, branching, dll.

Processor dapat mengakses memori dengan kapasitas yang besar (RAM), tetapi untuk mengakses RAM prosesor membutuhkan waktu yang lama. Oleh karena itu processor memiliki memori tersendiri yang kecil namun sangat cepat yang disebut sebagai register

Register adalah memori yang langsung tertanam di processor yang digunakan untuk menyimpan nilai-nilai langsung yang diperlukan saat melakukan perhitungan dan transfer data. Registers memiliki nama, ukuran, dan fungsi yang berbeda tergantung pada arsitektur prosesor. Tapi secara garis besar ada tiga jenis register:

  • General data registers: Digunakan untuk menyimpan nilai atau hasil dari berbagai operasi aritmatika dan logika. (RAX, RBX, RCX, RDX)
  • Stack and frame pointers: Digunakan untuk menunjuk awal dan akhir dari stack (RSP, RBP).
  • Instruction pointer/program counter: Digunakan untuk menunjuk ke awal instruksi berikutnya yang akan dieksekusi oleh prosesor (RIP).

CISC vs RISC

CISC dan RISC merupakan dua jenis assembly yang dibedakan berdasarkan kompleksitas instruksinya.

  • CISC (Complex Instruction Set Computing): memiliki instruksi yang lebih kompleks dan dirancang untuk menyelesaikan tugas dengan lebih sedikit baris kode. Instruksi dalam CISC sering kali mencakup beberapa operasi dalam satu perintah, seperti MUL dalam Intel Assembly yang dapat melakukan akses data, perkalian, dan penyimpanan hasil sekaligus. Contoh yang menggunakan jenis ini: IA-32 dan x64
  • RISC ( Reduced Instruction Set Computer): menggunakan instruksi yang lebih sederhana, di mana setiap instruksi umumnya hanya melakukan satu operasi. Hal ini dapat menghasilkan lebih banyak baris kode untuk menyelesaikan suatu tugas, tetapi juga bisa lebih efisien karena menghindari eksekusi operasi yang tidak diperlukan. Contoh yang menggunakan jenis ini: ARM

Note: IA-32 (32-bit) dan x64 (64-bit) adalah arsitektur processor dari Intel dan AMD yang digunakan untuk desktop. Sedangkan ARM digunakan untuk smartphone, embedded device, etc.

Menjawab Pernyataan Assembly itu Jadul

Sebenarnya bukan jadul, namun keberadaannya terpendam di bawah tanah dan kita tidak menyadari kegunaan Assembly itu sendiri. Seperti yang kita tahu, bahwa komputer hanya bisa membaca bilangan biner. Tanpa assembly sebuah program high-level C++ tidak akan bisa diterjemahkan ke bahasa mesin.

Mengapa Assembly tetap relevan?

1. Dasar Translasi ke Bahasa Mesin

  • Semua bahasa pemrograman tingkat tinggi pada akhirnya diterjemahkan ke bahasa mesin seperti C++ (saya belum tahu untuk bahasa interpreter seperti Python)

2. Digunakan di Sistem Kritis & Low-Level Programming

  • Assembly masih digunakan dalam pengembangan kernel, driver, firmware, embedded systems, serta exploit development dan reverse engineering
  • Contoh nyata: Kernel Linux dan Windows NT masih mengandung bagian kode Assembly untuk operasi tertentu.

3. Optimasi Performa & Keamanan

  • Beberapa bagian kode dalam sistem operasi, exploit development, hingga malware development ditulis dalam Assembly untuk mengontrol langsung hardware dan mengoptimalkan performa atau bypass mekanisme keamanan.

Jadi, Assembly bukan bahasa yang ketinggalan zaman, tetapi lebih tepatnya tersembunyi di balik lapisan bahasa tingkat tinggi yang kita gunakan sehari-hari.

Artikel menarik: DeepSeek mem-bypass NVIDIA menggunakan Assembly untuk GPU (PTX) untuk performa yang lebih optimal

https://www.tomshardware.com/tech-industry/artificial-intelligence/deepseeks-ai-breakthrough-bypasses-industry-standard-cuda-uses-assembly-like-ptx-programming-instead

Cara Belajar Assembly (Kalo mau)

Banyak kuliahan yang mengajarkan Assembly langsung ngoding pada sebuah text file secara langsung (biasanya ekstensinya .asm). Tapi menurut saya cara ini kurang tepat karena kita akan sulit untuk melihat alur eksekusi program. Solusinya adalah dengan langsung ngoding di software debugger. Saya sendiri menyarankan menggunakan x64dbg, sayangnya software ini cuma ada di Windows. Cara lain adalah dengan membuat sebuah program C/C++ lalu file executable-nya di-decompile menggunakan software debugger seperti yang saya sebutkan di atas. Setelah memahami konsep dasar assembly menggunakan Debugger, baru kita bisa lanjut belajar nulis manual from scratch. Ini berguna untuk membuat shellcode

Berikut software dan tools umum yang bisa digunakan untuk debugging sekaligus reverse engineering:

  • x64dbg (Windows only)
  • GNU Debugger (Linux)
  • IDA Pro
  • Ghidra
  • Radare2
  • Cutter (Radare versi GUI)


Lanjut: Belajar Assembly di x64dgb


Baca Juga