EXP-101: 2-Temel x86 Talimat Seti (Basic x86 Instructions Set)

Veri Hareketi Talimatları (Data Movement Instructions)

Veri hareketi talimatları, verilerin farklı konumlara (kayıtlar, bellek vb.) taşınmasını sağlar.

  • mov: Bir kaynaktaki veriyi hedefe taşır.
    • mov eax, ebx: ebx kaydındaki veriyi eax kaydına kopyalar. (Kayıttan kayda veri aktarımı)
    • mov eax, 0x10: eax kaydına doğrudan 0x10 sabit değerini atar. (Anlık değerden kayda veri aktarımı)
    • mov [eax], 0x10: eax kaydının gösterdiği bellek adresine 0x10 değerini yazar. (Kayıttan belleğe veri aktarımı)
    • mov eax, [eax+0x10]: eax kaydının değeriyle ofsetlenmiş bellek adresinden veri alır ve eax kaydına yazar. (Bellekten kayda veri aktarımı)

Aritmetik Talimatlar (Arithmetic Instructions)

Aritmetik talimatlar, sayılar üzerinde temel matematiksel işlemler gerçekleştirir.

  • add: İki değeri toplar.
    • add eax, ebx: eax kaydına ebx kaydındaki değeri ekler. (İki kaydın toplamı)
    • add eax, 0x10: eax kaydına 0x10 sabit değerini ekler. (Kayıtla sabit değerin toplamı)
    • mov eax, [ecx]: ecx kaydının gösterdiği adresteki değeri eax kaydına taşır. (Bu ifade aslında aritmetik değil, veri hareketidir.)
  • sub: Bir değeri diğerinden çıkarır.
  • mul: İki değeri çarpar. (İmzasız çarpma)
  • imul: İki değeri işaretli (signed) olarak çarpar.
  • div: İmzasız bölme işlemi yapar.
  • idiv: İşaretli bölme işlemi yapar.
  • inc: Bir değeri bir artırır.
  • dec: Bir değeri bir azaltır.
  • neg: Sayının işaretini değiştirir (pozitif → negatif veya tersi).
  • cmp: İki değeri karşılaştırır. Sonuç hiçbir kayda yazılmaz, yalnızca bayraklar (flag) etkilenir. Genellikle koşullu sıçrama komutlarıyla birlikte kullanılır.

Mantıksal Talimatlar (Logical Instructions)

Bu talimatlar ikili (binary) seviyede mantıksal işlemler yapar.

  • and: İki değeri AND işlemine tabi tutar (her iki bit 1 ise sonuç 1 olur).
  • or: İki değeri OR işlemine tabi tutar (bitlerden biri 1 ise sonuç 1 olur).
  • xor: İki değeri XOR işlemine tabi tutar (bitler farklıysa sonuç 1 olur).

Kontrol Transfer Talimatları (Control Transfer Instructions)

Programın yürütülme sırasını değiştiren talimatlardır. Hem koşullu hem de koşulsuz sıçramaları içerir.

  • jz: Önceki işlem sonucunda sıfır bayrağı (ZF) ayarlanmışsa belirtilen etikete sıçrar.
  • jnz: Önceki işlem sonucunda sıfır bayrağı ayarlanmamışsa belirtilen etikete sıçrar.
  • jl: İşlem sonucu negatifse (signed karşılaştırmalarda), sıçrama yapar.
  • jle: İşlem sonucu negatif veya sıfırsa, sıçrama yapar.
  • jmp: Koşulsuz olarak belirtilen adrese sıçrar.
  • call: Bir alt programı (fonksiyonu) çağırır. Geri dönüş adresini yığına (stack) kaydeder.
  • loop: Sayaç bir azaltılır; sayaç sıfır değilse belirtilen etikete sıçrar.
  • ret: Alt programdan (fonksiyondan) geri döner. Yığından alınan geri dönüş adresine atlar.

Özel Talimatlar (Special Instructions)

  • int: Yazılım kesmesi (interrupt) oluşturur. Donanım veya işletim sistemiyle etkileşim için kullanılır.
    • Örneğin: int 0x80, Linux sistemlerinde sistem çağrısı yapmak için kullanılır.

Kaynakça:

https://www.corelan.be

Exploit Geliştirme 101 (2. Baskı) – M. ALPARSLAN AKYILDIZ

Hacking: The Art of Exploitation, 2nd Edition