
Herkese selamlar.
Yeni bir eğitim serisine başlıyoruz. Bu serimizde kaynağı nerdeyse çok az bulunan ve herkesin "çok zor" olarak nitelendirdiği "Assembly" programlama dilini sıfırdan ileri seviye sizlere aktaracağım.
Uzun süredir bu konu üzerinde çalışmalar yapıyor ve özellikle yabancı kaynaklardan konu hakkında bilgi topluyordum. Mümkün olduğunca bol örnekler ve anlatımlar ile anlatmaya çalıştım.
Eğitim serimiz 8 aşamadan oluşacaktır. Her aşamada konu ile alakalı anlatımlar ve örnekler olacak. Her hafta 1 aşamayı sizlere aktaracağım. Yani eğitim serimiz yaklaşık 8 hafta (2 ay) sürecektir. Sonrasında genel bir konu açarak tüm aşamaları tek bir yerde toplayacağım. Şimdi, hazırsanız ilk aşamadan başlayalım. Şimdiden iyi okumalar

Assembly Nedir?
Assembly, bilgisayara verilen en küçük ve en net talimatların insan tarafından okunabilir hâlidir.
Bilgisayarın gerçekte gördüğü tek şey şudur:
0 ve 1
Bu nedenle Assembly:
- Makine dilinin insan gözüyle okunabilecek seviyeye çevrilmiş hâlidir.
- Yüksek seviyeli diller ile donanım arasında bir köprü görevi görür.
Bunu şöyle düşünebiliriz:
Yüksek seviyeli diller “Ne yapılacağını” söylerken, Assembly “Nasıl yapılacağını” gösterir.
Örneğin Python’da:
Python:
print("Merhaba")
tek satır görünür.
Assembly ise bu satırın perde arkasında gerçekleşen tüm mikro adımları ortaya serer.

Bilgisayar Gerçekte Nasıl Çalışır? (0 ve 1 Mantığı)
Bilgisayarın mantığı sandığımızdan çok daha basittir:
Elektrik varsa - 1
Elektrik yoksa - 0
Tüm fotoğraflar, videolar, oyunlar, programlar, hatta bu metnin kendisi bile bilgisayar açısından yalnızca bu iki sembolden oluşur.
İnsanların bu dili anlaması imkânsız olduğundan, zaman içinde bu 0 ve 1’lerin daha anlaşılabilir biçimde ifade edilmesi için Assembly geliştirildi.
Assembly, “Makinedeki gerçek gerçeğin” okunabilir biçimi.

Neden Assembly Var?
Bilgisayar bilimi gelişirken insanlar şunu fark etti:
“Makine dili çok güçlü, fakat insanlar için yazması ve anlaması imkânsıza yakın.”
Bu nedenle şu çözüm ortaya çıktı:
Makinenin anlayacağı format bozulmadan, fakat insanın okuyabileceği sembollerle ifade edilen bir ara dil oluşturalım.
İşte bu ara dil Assembly’dir.
Şu şekilde bir teknoloji zinciri oluşur:
Python, C#, Java → Yüksek seviye
C, C++ → Orta seviye
Assembly → Düşük seviye (insan tarafından okunabilir)
Makine Dili (0-1) → Donanım seviyesi
Elektrik → Fiziksel seviye
Görüldüğü gibi Assembly, insanın anlayabileceği en düşük seviyedir; dolayısıyla bilgisayarı gerçek anlamda anlamak isteyen herkesin uğrak noktasıdır.

CPU Nasıl Çalışır?
CPU’yu bir fabrikanın genel müdürü gibi düşünebiliriz.
▪ RAM - Depo
▪ CPU - Komutları uygulayan yönetici
▪ Talimatlar - Yapılması gereken işler
Her program, işlemciye sıralı davranışlar içeren bir “görev listesi” sunar.
CPU bu listeyi sürekli döngü hâlinde takip eder:
1. Talimatı alır (Fetch)
2. Talimatın ne istediğini çözer (Decode)
3. Talimatı uygulamaya koyar (Execute)
Bu döngü bir saniyede milyarlarca kez gerçekleşir.
Bunu daha iyi anlamak açısından günlük bir örnekle açıklayalım. Bir market kasiyeri düşünelim. Ürün barkodunu okur, fiyatı sisteme işler, toplam tutara ekler, işlemi tekrarlar.
Kasiyer tek seferde küçük işler yapar fakat işlem sayısı arttıkça büyük bir sonuç ortaya çıkar. CPU’nun yaptığı iş de tamamen bundan ibarettir: küçük işleri çok hızlı yapmak. Assembly ise bu küçük işlerin her birini isim isim, adım adım gösterir.

Assembly Neden Hackerlar için Kritik?
Reverse engineering (tersine mühendislik), güvenlik araştırmaları ve zararlı yazılım analizinin (yani biz) her düzeyinde Assembly bilgisi şarttır. Tabikide normal yaptığımız zararlı dosya analizi için assembly şart değil ancak özellikle tersine mühendislik yapmak isteyenlerin mutlaka temel seviyede de olsa bilmesi gereken bir dildir.
Bunun nedeni basittir:
Çoğu programın kaynak kodu yoktur.
Çalıştırılabilir dosyalar incelendiğinde karşınıza çıkan şey Assembly’dir.
Crackme, lisans bypass, patching gibi işlemler Assembly üzerinden yapılır.
Bir programda şifrenin doğru mu yanlış mı kontrol edildiğini görebileceğiniz tek seviye budur.
Malware analizi tamamen Assembly seviyesinde yürür.
Bir zararlı yazılımın:
belleğe ne yazdığı,
nereye bağlandığı,
hangi fonksiyonları çağırdığı,
hangi şifreleme yöntemini kullandığı
gibi kritik bilgiler Assembly kodunda görünür.
Sistemlerin mimarisi gerçek anlamda ancak Assembly ile anlaşılır.
Bir bilgisayarın “Neden böyle davrandığını” anlamak için, önce nasıl çalıştığını bilmek gerekir.
Bu nedenle pek çok profesyonel, Assembly’i bilgi güvenliğinin Latince’si olarak tanımlar.

Şimdi bir örnek daha vererek konuyu iyice pekiştirelim. Bir bilgisayar oyununda “Zıpla” tuşuna bastığımızı düşünelim.
Kullanıcı için:
“Tuşa bastım, karakter zıpladı.”
Bu kadar.
Fakat sistem açısından:
- Tuş tetiklendi
- İşlemci girdiyi algıladı
- Oyun motoru komutu işledi
- Fizik motoru kuvvet uyguladı
- Animasyon seçildi
- Kare ekrana çizildi
- Ses efekti çalıştı
Göz kırpma süresinden kısa bir anda yüzlerce adım gerçekleşir.
Assembly, işte bu adımların her birini bağımsız şekilde görebileceğiniz tek seviyedir.

Bu aşamadaki konularımızın da sonuna geldik. Bu aşamada Assembly dilinin mantığını ve temel kavramlarını sizlere aktarmaya çalıştım. Aşama 2 nin konularını haftaya sizlere aktarmış olacağım.
Bir sonraki konuda görüşmek üzere, kendinize iyi bakın

Son düzenleme:





