Assembly Basit Talimatlar - Assembly ve Tersine Muhendislik x86

x86 Temel Assembly Talimatları – Assembly (Intel)

Genel Siber Güvenlik, Programlama, Tersine Mühendislik

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

Bir cevap yazın