www.packerlx.com Packer for Linux eXecutables
Ana Sayfa
Ana Sayfa
Tux
Linux
Programlama
Programlama
Projeler
Projeler
enginkuzu blog
BLOG
Eskiler
Eskiler
Ben
Ben



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?