Root > Documents > Web Güvenlik Açıkları > vb 2 (yeni baslayanlar icin)
Cyber-Warrior.Org \ Doküman \ Web Güvenlik Açıkları > vb 2 (yeni baslayanlar icin)
Madde
  Yazar : themyth
  Date : 23.11.2004 16:16:30
 
# vb 2 (yeni baslayanlar icin)
 

 Bölüm 2 - Visual Basic’te Ilerleme                     

 

Konular:

 

Degiskenlerin belirlenmesi (tanimlanmasi)

Visual Basic ‘te “=” isareti

Degiskenlere yazisal degerlerin atanmasi

Visual Basic \'te "&"  isareti

Degisken Türleri

 

 Degiskenlerin belirtilmesi (tanimlanmasi):

 

Bir degiskeni Visual Basic’te kullanabilmek ve degiskenlerden yararlanabilmek için degiskenleri belirtmek gerekmektedir. Bir degiskeni belirli bir kümeye ait olarak tanimlayip belirtmeye “degiskeni belirtmek” gerekir

Matematikten hatirlarsak;

 

Bir fonksiyon veya kümesel islem icin kullanacagimiz degiskenlerin ne tür bir sayi olacagini nerede tanimli oldugunu belirtmemiz gerekir.


x = { x | x є Z+ , x < 6 , x > 2 }


Bu matematiksel ifadenin anlami:

X öyleki; x sayisi pozitif tam sayilarda tanimli, 6 dan küçük, 2 den büyük

(Buradaki Z+, pozitif tamsayilari göstermektedir)

Burada sonuç olarak x degiskeninin alabilecegi degerler:

 

x = { 3, 4, 5}

Matematikte iyi olmayanlar üzülmesinler, burada sadece belirtmek istedigimiz, x degiskeni belirli bir sinirlama ile tanimlamaktir. Tabi ki bir sinirlama getirmeden de belirtme yapmak mümkündür.

 Örnek olarak;

x = { x | x є Z}

 

Burada x bütün tam sayilar olabilir.

 

Simdi farkli bir yoldan açiklama yapalim.

 

 Örnek olarak;

 

A adiyla tanimladigimiz bir topluluk var. Bu A toplulugunu söyle ifade ediyoruz:
Istanbuda, Ümraniyede, Çamlica sitesinde, Cansu apartmaninda, 3. katta ikamet eden insanlar.

 

Eger bir degiskeni bu kümeye ait olarak tanimlarsak, bu degisken degeri, sadece buradaki insanlardan birinin ismi olarak deger alabilir. Matematikte verdigimiz örneklerde ayni olayi ifade etmektedir.

 

Tabiki bu kümeyi genisletmek veya daraltmak, veya bir küme belirtmeksizin sadece degiskeni belirtmek te mümkündür.

Sonuçta Degisken belirtmek bir tür beyan etmedir. Tabiki daha büyük bir kümeye ait bir degiskeni belirtmek ve bunu saklamak için daha çok yer harcanacaktir.

 

 Örnek olarak;

 

Kisilerin adreslerini tuttugumuz bir dosya düsününüz. Eger “Istanbuda, Ümraniye’de, Çamlica sitesinde, Cansu apartmaninda, 3. katta ikamet eden insanlar.” seklinde  belirttigimiz kümeden bir kisinin adresini yazacaksak sadece “5. Daire” diye belirtmek mümkün olacaktir. Fakat böyle bir küme belirtmeden bir kisinin adresi için

“KITA – ÜLKE – SEHIR – ILÇE (veya KASABA) – SEMT – SOKAK – BINA – NUMARA – POSTA KODU....” gibi bir çok bilgi girmek zorunda kaliriz. Haliyle bu tip tanimlama kagit üzerinde de daha çok yer kaplar. Aynen programlama da da bu tip tanimlamalar yani daha genis tanimlamalar, daha çok yer kaplarlar.

 

Bir degisken, prosedürler içinde;

 

Dim [Degisken ismi]

 

seklinde belirtilir.


 Örnek olarak;

”Merhaba” adinda bir sub prosedürümüz bulunmaktadir. Bu prosedürün sub veya function olmasi önemli degildir. Sadece belirtmek istedigim herhangibi bir prosedürde degiskenlerin tanimlanmasidir.

 

Sub Merhaba()

 

End sub

 

Peki tanimlamak istedigimiz degiskenleri nereye nasil yaziyoruz.

 Örnek olarak;

”Merhaba” adli bu prosedür içinde, ”a” adinda bir degiskeni tanimlamak için

 

Sub Merhaba()

Dim a

End Sub

 

... seklinde bir ifade kullaniyoruz. Sonuç olarak bu örnekte “Merhaba” adli prosedürde “a” adli bir degisken belirtmis bulunuyoruz.

 

 Yeni bir örnek;

 

“Merhaba” adli prosedürde a, b, mat, c12 adli 4 tane degisken belirleyelim (tanimlayalim).

 

 

Sub Merhaba()

Dim a

Dim b

Dim mat

Dim c12

End Sub

 

... gördügünüz gibi degisken tanimlama son derece basittir. Degiskenleri alt alta “dim” kullanarak tanimlayabildigimiz gibi ayrica;

 

Sub Merhaba()

Dim a, b, mat, c12

End Sub

 

... seklinde de belirtmek mümkündür. Bu yöntem bizim için daha kisa ve kullanislidir.

 

 

q       Degisken isimlerini asla tirnak ifadesi içinde yazmayiniz
Örnek olarak ;

Dim “a”

seklinde bir degisken belirtmesi olamaz.

q       Tirnak içinde gördügünüz hiçbir ifade degisken degildir.

q       Dim ile prosedürlerde belirtilmis degiskenler prosedürde “End Sub” veya “End Function” ifadesiyle yok olurlar. Ve ayrica dim ile belirtilen degiskenler form içinde bilgi tasimazlar, sadece o prosedür içinde kullanilirlar.

 

 Visual Basic’te “=” isareti

 

Visual Basic, program kodlari içerisinde; bir “=” isareti gördügünde, durur ve ilk olarak yanliz ve yanliz “=” isaretinin deger kismina yani sag tarafina bakar. Esittir’in sag tarafini hesaplar, daha sonra da esittirin sol tarafindaki degiskene esitler.

 

Sub Deneme()

Dim a

a = 3 + 3 / 3
End Sub

 

 

Öncelikle gördügüz sari bölümdeki deger hesaplanir (4),  daha sonra “a” degiskenine atanir.

 

          Bir prosedür içinde tanimladigimiz bir degiskene, süphesiz  deger veririz. Çünkü zaten bir degiskeni bir degeri tutmasi için belirtiriz. Degiskenlere deger atamak “=” isaretiyle mümkün olmaktadir. Visual Basic’te, iki türlü degisken atamasi vardir. Bunlar:

 

Degisken = Deger Esitlemesi

 

Asagidaki örnekte bir degiskene bir deger atadik.

 

Sub Deneme()

Dim a

a = 3

End Sub

 

Örnekte, “a” adli degiskene 3 degerini atadik.  Simdi asagidaki örnege bakalim.

 

Sub Deneme()

Dim a, b, c

a = 3
b = 4

c = 2.876456

End Sub

 

Örnekte, “a”, “b”, “c” adli degiskenlere “3”, “4”, “2.876456” degerlerini atadik.  Simdi asagidaki örnege bakalim.

 

Sub Deneme()

Dim a

a = 3

a = a + 1

End Sub

 

Sari ile taranmis alana baktiginizda;

a = a + 1

 

...ifadesinde, matematiksel bir yanlis oldugunu görürsünüz. “Nasil olurda bir sayi (a) kendisinin bir fazlasina esit olur.” Yani 123 nasil olurda 124’e esitlenir. Bu matematiksel olarak yanlistir. Fakat Visual Basic de yanlis degildir. Yukarda belirttigimiz gibi, öncelikle “=” in sag tarafi hesaplanir. Yani;

 

a + 1

 

“a” degiskeninin degeri 3 oldugundan

 

3 + 1 = 4

 

...sonucu alinir. Simdi bu alinan deger esitligin diger tarafindaki (sol) degisken degerine esitlenir. Yani; a = 4 olur. Bunun gibi ifadeleri daha sonralari döngülerde kullanicagiz.

 

 

Degisken = Degisken Esitlemesi

 

 

Ikinci tip esitleme ise, bir degiskenin degerine, bir baska degiskenin degerini atamaktir.

 

Sub Deneme()

Dim a, b

a = 3

b = a

End Sub

 

Burada ilk olarak; a degiskenine “3” degerini atadik. Daha sonra da, b degiskenine a degiskeninin degerini atadik. Iste böyle bir durumda da yine “=” kuralimizi kullanicaz. Öncelikle “=” sag tarafini hesaplayalim.

 

b = a


a, 3 oldugundan...

 

b = 3

 

Iste sonuçta; b degiskeni a degiskeninin degerini alacaktir.

 

 Degiskenlere yazisal degerlerin atanmasi

 

Süphesiz, degskenlere sayisal deger atiyabildigimiz gibi, yazisal degerlerde atamak mümkündür. Örnegin; a adli degiskene “Nasilsin” yazisal ifadesini atayalim

 

Sub Deneme()

Dim A

A = “Nasilsin”

End Sub

 

Gördügünüz gibi, yazisal ifadeleri tirnak içinde yaziyoruz. Eger bu yazisal ifadeyi tirnak içinde belirtmezsek, o zaman A degiskeninin degeri Nasilsin adli bir degiskenin degerine esit olur. Böyle bir degisken olmadigi için, A degiskeninin degeri bos olur. Asagida örnekte görülüyor.

 

Sub Deneme()

Dim A

A = Nasilsin

End Sub

 

Asagidaki iki ifadedeki fark; ilk ifadede A degiskeninin degeri “Nasilsin” yazisal degeridir. Ancak ikincide, A degiskeninin degeri yoktur.

 

Sub Deneme()

Dim A

A = “Nasilsin”

End Sub

Sub Deneme()

Dim A

A = Nasilsin

End Sub

 

Ikinci ifadede eger Nasilsin adli bir degisken olsaydi, o zaman A degiskeninin deger Nasilsin adli degiskeninin degeri olurdu.

 

 Örnegin:

Sub Deneme()

Dim A, Nasilsin, B

Nasilsin = “Güzel”

A = Nasilsin

B = “Nasilsin”

End Sub

 

Yesille taranmis bölgedeki A degiskeninin deger “Güzel” dir. Sari ile taranmis B degiskeninin degeri ise “Nasilsin” dir.

 

 

q       Hiçbir zaman bir yazilsal deger veya sayisal deger bir degiskene esitlenmez.

 

 

Sub Deneme()

Dim A

3 = A

End Sub

 

..gibi bir ifade degisken görüldügü gibi 3’e bir degisken atamak imkansizdir. Çünkü “=” in sol tarafinda mutlaka bir degisken olmalidir ki deger atanabilsin. Fakat 3 sabit bir degerdir.

 

Aslinda degiskenleri belirlemeden de kullanabiliriz. Fakat bu bize çok hafiza kaybettirir. Yani RAM’leri doldurur. Eger küçük bir program yapiyorsak bu az ram kaybi bizim programimizi etkilemez. Ancak büyük programlarda, büyük etkiler olusur. Programin yaptigi islemler yavaslar. Bu yüzden profesyonelce çalismali ve her degiskeni belirtmeliyiz.

 

 Visual Basic ‘te “&”  isareti

 

          Visual Basic ‘te iki yazisal ifadeyi birlestirmek için “&” isareti kullanilir.

 

 Örnegin;

 

Sub Deneme()

Dim A as string

A = “C” & “W”
End Sub

 

Burada A degiskeninin degeri “VBKAYNAK.COM” olur. Tabi bunu

 

Sub Deneme()

Dim A as string

A = “CW”

End Sub

 

...seklinde belirtmek daha kolaydir. Ancak, bir degisken ve bir yaziyi birlestirmek için & kullanmak zorunludur.

 

Sub Deneme()

Dim A as string,B as string

A = “CW”

B = A & “’ye hosgeldiniz”

End Sub

 

Burada ise B degiskeninin degeri “VBKAYNAK.COM’a hosgeldiniz” olur. Görüldügü gibi yazisal degerli ifadeleri birlestirmek için “&” kullanilir.

 

“&” isareti daha çok bilinmeyen degerlerde kullanilir. Yani programi hazirlarken bir özellik düsündünüz. Bu özelligin program kapandiginda “Güle Güle [Kullanici Ismi]” mesajini göstermesini istiyoruz. Biz programi yazarken, programi kullanacak kisinin veya kisilerin ismini bilmemekteyiz. Kullanici ismi Windows’a kayitlidir. Bunu registry sayesinde okuyup alabiliyoruz (Registry’yi daha ilerki konularimizda görecegiz). Suan için registry’den bu kayiti nasil ve hangi yöntemle okudugu önemli degildir. Sadece bu degeri okuyup bir degiskene esitledigimizi düsünelim.

 

Sub Deneme

Dim Kullanici as string

Dim Kullanici as string

Kullanici = ... Registry’den okunacak

Mesaj = “Güle Güle “ & Kullanici

End Sub

 

Sari ile taranmis alana baktigimizda “Güle Güle “ degeriyle Kullanici adli degiskenin degeri birlestiriliyor.

 

 

 

 

 Degisken Türleri

 

Her degiskene, o degiskene atayacagimiz degere göre bir degisken türü seçebiliriz. Bu bize programlarimizda hiz performans kazandirir. Daha dogrusu uygun tür bizi hafiza kaybindan kurtarir. Asagidaki tabloda degisken türleri gözükmektedir.

 

Isim
Tür

Varsayilan
deger

Deger
Boyut

Byte

Tam Sayi

0

0 – 255 arasi

1 Byte

Boolean

Dogru / Yanlis

Yanlis

-1(Dogru), 0 (Yanlis)

2 Byte

Integer

Tam Sayi

0

-32.768 / + 32.767 arasi

2 Byte

String

Yazisal ifade

“”

1 / 65.400

X Byte

String

Yazisal ifade

“”

231 karakter (2 Milyar)

10+ X Byte

Variant

Genel

(Bos)

Her türlü deger

16 Byte

X: Karakter sayisi kaç ise, X o sayiya esittir. Örnek: 5 karakterli bir yazisal ifade hafizada 5 byte yer kaplar.

 

q       65.400 karakterden daha uzun karakterlerde 2. tip String’i kullanmak gerekmektedir.

q       Degiskenlere deger atanmazsa degiskenler varsayilan degerleri alirlar.

 

Bunlardan baska degisken tipleri degisken vardir. Ilerideki konularda bunlari isleyecegiz.

 

Eger bir degiskenin, degisken türü belirtilmezse, bu degiskenin türü “Variant” denen ve 16 Bayt yer kaplayan bir tür olur. Variant en genel degisken türüdür. Birçok formatta veriyi saklayabilir. Fakat çok degisken kullandigimizda variant ile belirttigimiz (yada türünü belirtmedigimiz) degiskenler hafizada çok yer kaplarlar.

EKSIK Yaz. Stringse 16 + len(x) kaplar

 

 Örnek;

 

Bir prosedür içinde 12 tane degisken kullandigimizi düsünün, eger bunlara herhangi bir degisken tipi belirlemezsek (yani variant olurlarsa)

Bu degiskenler hafizada 16 x 12 = 192 Bayt yer kaplar.

 

Fakat diyelim ki, bu kullanacagimiz degiskenlerin hepsinin içerecegi degerler; 0 ile 255 arasinda tam sayilar, o zaman yukaridaki tablodan gördügünüz gibi “Byte” adli degisken bizim için uygun olacaktir. Iste bu sekilde bütün degiskenleri “Byte” türü ile tanimlarsak, hafizadan her bir degisken için 1’er bayt yer isgal olur. Böylece

 

16 x 1 = 16 Bayt yer kaplar

 

Sonuç olarak;

 

192 – 16 = 176 Bayt

 

yerden tasarruf etmis oluruz. Degiskenler bölümünde belirttigimiz gibi, bir deger tutucuyu belirli bir sinirlama içinde tanimlamaya, degiskenlerin belirtilmesi deniyordu. Iste Byte degisken türü için bu aralik;

 

x = { x | 0 < x < 255, x  є Z }

 

Integer degisken türü için

 

x = { x | -32.768 < x < +32.767, x  є Z }

 

... gibi ifade edilebilir.

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©