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:ebxkaydındaki veriyieaxkaydına kopyalar. (Kayıttan kayda veri aktarımı)mov eax, 0x10:eaxkaydına doğrudan 0x10 sabit değerini atar. (Anlık değerden kayda veri aktarımı)mov [eax], 0x10:eaxkaydının gösterdiği bellek adresine 0x10 değerini yazar. (Kayıttan belleğe veri aktarımı)mov eax, [eax+0x10]:eaxkaydının değeriyle ofsetlenmiş bellek adresinden veri alır veeaxkaydı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:eaxkaydınaebxkaydındaki değeri ekler. (İki kaydın toplamı)add eax, 0x10:eaxkaydına 0x10 sabit değerini ekler. (Kayıtla sabit değerin toplamı)mov eax, [ecx]:ecxkaydının gösterdiği adresteki değerieaxkaydı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.
- Örneğin:
Kaynakça:
Exploit Geliştirme 101 (2. Baskı) – M. ALPARSLAN AKYILDIZ
Hacking: The Art of Exploitation, 2nd Edition