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 Far Word): 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.
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 xe deneme1 değişken değerini atadı.
db ile 8bitlik bir veri tanımladık ancak 16 bitlik bir ax registerinde 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: [ame]https://www.youtube.com/watch?v=owCyceN3ALk[/ame]
Bu konumunda burda sonuna gelmiş bulunmaktayım.
Bugs Bunny iyi günler diler.
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 Far Word): 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 xe deneme1 değişken değerini atadı.
db ile 8bitlik bir veri tanımladık ancak 16 bitlik bir ax registerinde 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: [ame]https://www.youtube.com/watch?v=owCyceN3ALk[/ame]
Bu konumunda burda sonuna gelmiş bulunmaktayım.
Bugs Bunny iyi günler diler.
Son düzenleme: