Herkese merhaba TurkHackTeam üyeleri,

Ben Bugs Bunny




X86 Assembly Veri Tanımlamaları

Assembly nedir?

Assembly diğer programlama dillerine göre daha zor ve yazması daha uzundur. Ancak diğer dillere göre birden çok üstünlüğü bulunmaktadır. Bu dili kullanırken kullanılan makinenin donanımsal özelliklerinin iyi bir şekilde bilinmesi gerekmektedir.

Başlatılan veriler için Veri tanımlama:

DB (Define Byte) = 1 byte veri tanımlar.
DW (Define Word) = 2 byte veri tanımlar.
DD (Define Doubleword) = 4 byte veri tanımlar.
DF (Define Fourword) = 6 byte veri tanımlar.
DQ (Define Quadword) = 8 byte veri tanımlar.
DT (Define Tenbyte) = 10 byte veri tanımlar.
DUP = Duplicate


Başlatılmamış veriler için Veri tanımlama:

RESB(Reserve a Byte) = 1 byte yer ayırır.
RESW(Reserve a Word) = 2 byte yer ayırır.
RESD(Reserve a Doubleword) = 4 byte yer ayırır.
RESQ(Reserve a Quadword) = 8 byte yer ayırır.
REST(Reserve a Ten bytes) = 10 byte yer ayırır.

Kod:
section .text
global _start

_start: ; giriş noktası
mov edx,5 ; mesaj uzunluğu
mov ecx,choice ; yazılacak mesaj
mov ebx,1 ; dosya tanımlayacısı
mov eax,4 ; sistem çağrı numarası (sys_write)
int 0x80 ; çağrı çekirdeği

mov eax,1 ; sistem çağrı numarası (sys_exit)
int 0x80 ; çağrı çekirdeği

section .data
choice DW 'bunny'
Bu kodu çalıştırdığımızda bize çıktı olarak bunny yazısını verecektir.



Burada bulunan değişkeni db olarak tanımlarsak hafızada 1 byte değer ayırır.
dw olarak tanımlarsak 2 byte değer ayırır.



Burada mov ile x?e deneme1 değişken değerini atadı.




db ile 8bitlik bir veri tanımladık ancak 16 bitlik bir ax registerin?de yazmaya çalışırsak hata verecektir. 16 bit registerın neresine yazayım bu 8 biti ben diyor. Bu hatayı düzeltmek için ise;



Word ptr kullanabiliriz. Word ptr sayesinde tamam 16 bitsen 8 biti al kendi içinde yer alan 8 bitlik registera aktar diyoruz.

word ptr detaylı bilgi: YouTube




Bu konumunda burda sonuna gelmiş bulunmaktayım.

Bugs Bunny iyi günler diler.