Birkaç Windows Uygulaması
Aşağıda bir text dosyasının içeriğini okuyup ekrana mesaj kutusu halinde
getiren küçük bir program bulunmakta. Daha fazla örnek için http://win32asm.cjb.net
adresinde tutorial bölümünü veya arama yapmak istiyorsanız
www.google.com adresini önerebilirim.
Ilk olarak data segment tanımlanmış. File ile gösterilen string diskten
okunacak dosya ismini belirtiyor. Diğer ifadeler ise hatalar sırasında
gösterilecek mesajları içeriyor. Karşısında ? bulunan bölümler ise program
çalışma zamanında gerekecek değişkenleri işaret ediyor. fhandle: Açılan dosyanın
handle numarasıdır. Okuma ve yazma işlemlerinde bize gerekecek. fsize :
Dosya boyutu öğrenildiğinde buraya kaydedilecek. memptr : İşletim sisteminden
bellek alanı istendiği zaman bu alanın adresini burada tutacağız. okundu : Bize
pek gerekli değil ama kaç byte veri okunduğunu tutacak.
CreateFileA apisi okumak veya yazmak amacıyla dosyaların açılması işlemini
yerine getirir. Gerekli parametreleri geçiyorum, windows api help dosyalarında
ayrıntılı bilgi bulabilirsiniz. Daha sonra eax registerine dosyanın handle
numarası aktarılacak. Bizde daha sonra okuma yapacağımız için fhandle
değişkenimize kaydediyoruz. cmp ile karşılaştırma yapılır. Eğer fhandle
0FFFFFFFF hexadecimal değerini almışsa bir hata oluşmuş demektir.
Karşılaştırmadan sonra je ile eşit ise son adresine zıpla şeklinde işleme devam
ediyoruz. Aşağıda 'son:' label'ı ile tanımlanan yere atlanırsa eğer burada hata
mesajını gösteren bir MessageBox ve çıkış kodu yer alıyor. Hata yok ise
alttaki komuta geçilir. GetFileSize ile dosya boyutu öğrenilir ve fsize
değişkenine kaydedilir. GlobalAlloc ile dosya boyutu kadar bellek işletim
sisteminden istenir, daha sonra buraya okunan veri yerleştirilecek. Yine burada
bir hata oluşmuş ise 'sononce:' isimli label'a zıplanır. Burada açılmış olan
dosya kapatılır, hata mesajı gösterilir ve program sonlanır. Burada da bir hata
yok ise ReadFile api fonksiyonu gerekli parametreleri ile çağrılarak dosya
okunur, dosyanın okunduğu adresdeki veri mesaj kutusu halinde ekrana yansıtılır
ve programı sonlandırmak amacıyla 'bitti:' label'ı ile gösterilen adrese
zıplanır. Derlenen dosyamızın boyutu 6kbyte dır. Program düzgün çalışıyor ama
yine içinde küçük bir hata var, bakalım bulabilecek misiniz?
|