x86 Temel Assembly Talimatları – Assembly (Intel)
Reverse engineering yaparken bolca kullanılan assembly komutları, işlemcilerimin davranışlarına yön verir. Bu yazımızda da temel assembly talimatlarını inceliyor olacağız.
NOT: Burada yeni bir programlama dili öğrenmiyoruz. O yüzden sadece tersine mühendislik yaparken bilmemiz gereken assembly talimatlarını işleyeceğiz.
Terimler Sözlüğü:
Register: İşlemci üzerinde bulunan ve verileri saklayan alan. Ben ona “yazmaç ” diyeceğim.
Stack: Yığın hafıza bölmesi, geçici verilerin tutulduğu bölme.
Temel Assembly Talimatları
x86 mimariye sahip olan 32 bit mikro işlemciler için temel assembly talimatlarından bazıları mov, push ve pop‘tur.
mov
Bu talimat kullanılarak yazmaçlar arası kopyalama yapılabilir, bir yazmaca sabir bir değer atılabilir.
mov eax, 45
Yukarıdaki komut ile EAX yazmacına 45 yazdık.
mov eax, [45]
Yukaridaki komutla ise EAX yazmacına 45 ‘i adresledik, referans gösterdik.ettik. Eğer Python biliyorsanız bunu şu şekilde kavrayabilirsiniz. Listelerdeki referanslama olayı.
pop ve push
Pop ve push işlemleri Stack Memory denilen Yığın Hafıza Bölmesi’ne yönelik yapılan komutlardır.
push 17
push 23
pop rax
pop rcx
Yukarıdaki talimatları sırayla açıklayalım:
•İlk push işleminden sonra yığın yani stack bir değere sahip -> 17
•İkinci push işlemimizde ise stack iki değere sahiğ -> 17 23
•İlk pop işlemimizde ise 23’ü seçiyor ve RAX yazmacına koyuyor ve stacktan alıyoruz. Stack:17
•İkinci pop işlemimizde ise 17’yi seçiyor ve RCX yazmacına koyuyor ardından yığın hafızası bölmesini temizliyoruz.
Aritmetik Operatörler
add
add eax, 10
Yukarıdaki kod ile tam olarak yaptığımız şey:
eax = eax+10
imul
imul esi, edi, 25
Yukaridaki kod ile de yaptığımız şey tam olarak:
esi = edi x 25
imul eax, [var]
Yukarıda ise :
eax = eax x hafıza değişkeni olan var’ın içeriği
idiv
idiv operatörü tam sayı bölmesi yapmamızı sağlıyor.
idiv ebx
Yukarıdaki talimatın anlamı:
EDX:EAX yazmacının içeriği / EBX yazmacığnın içeriği
EDX:EAX, edx ve eax yazmaçları tarafından oluşturulan 64 bitlik değer anlamına geliyorr.
Klavyemin döndüğünce, ve öğrenebildiğim kadar tersine mühendislikte işimize yarayacak assembly temellerini anlattım. Eğer tersine mühendislik hakkında daha fazla bilgi arıyorsanız Tersine Mühendislik Nedir ? yazımı ziyaret edebilirsiniz.
Kaynak:
https://en.wikipedia.org/wiki/X86_instruction_listings
https://tr.qwe.wiki/wiki/X86_assembly_language
https://courses.edx.org/courses/coursev1:UC3Mx+INF.2x+3T2019/courseware/1c5fk6e0bjqrmg1lt4usb7fcm/1c5fk6f01hrkvloutl5jr19ims/?child=first
Uzun süre Blogger’de acaaba.com adresinde yazılar yazdım. Genel olarak teknoloji, sanat ve psikoloji üzerine bir internet sitesi. Yaklaşık 3 yıldır aralıklı olarak siber güvenlik ile ilgilendim, 2 yıldır da profesyonel olarak bu alanda çeşitli çalışmalar yapmaktayım.