Ders: Binary Files

L4roXyL

0
İyinet Üyesi
Katılım
16 Ekim 2011
Mesajlar
124
Reaction score
2
Ders: Binary File(s)
Tarih: 26 Haziran 2009 Cuma
Yazan: L4roXyL - (Hasan AYDENİZ)

-

Binary files çoğu yazılım dilinde mevcut olan bir konudur. Binary kelimesinin türkçe karşılığı "ikili/çift" demektir.
Bu konu emin olun göründüğü kadar ne kısa, nede açıktır. Yeterince karışık olmakla beraber uzun ve kullanıma göre güzel imkanlar sunan bir konudur. Kimilerine göre mIRC Scripting-de sık kullanılan bir konu olmadığı için pek önemli değildir/sayılmaz. Lakin ders sonunda ne kadar gerekli olduğunu ve nerelerde kullanabileceğinizi göreceksiniz. Ki binary komutlarını sıkca kullanmak veya kullanmamak size kalmış birşeydir.
Türkiyede binary files hakkında şuana kadar herhangi bir ders yazılmadı.(mIRC Scripting için) Bundan dolayı pek kullanılmıyor olabilir-/de/.
Neyse ben daha fazla uzatmadan dersimize başlıyorum.

-

Binary files komutları

1- /bread [-t] <filename> <S> <N> <&binvar>
Bu komut, belirtilen dosyayı belirtilen &binary-variable -a okutmanıza/yükletmenize yarar.
-t: Bu parametre okutma işleminde $crlf kullanır. Yani yükletilen dosyada yeni satır/alt satır var ise, satır satır yükleme yapar.(Normalde satır satır olsa dahi yan yana okutulur)
<S>: Dosyayı okuturken hangi pozisyondan itibaren okutacağınızı/yükleteceğinizi belirtmenize yarar.
<N>: Byte manasına gelir. Okutulan dosyanın <S> pozisyonundan <N> byte-lık verisine kadar olan kısmını okutursunuz.
Şuana kadar fazla birşey anlamadıysanız örneklere bakınca anlayacağını tahmin ediyorum.
Örneğin; /write deneme.txt Bu bir denemedir. komutu ile deneme.txt isimli dosyanın içerisine "Bu bir denemedir." yazısını yazdırıyoruz.
Yani artık mIRC ana klasöründe deneme.txt bir dosya mevcut.
ŞİMDİ aşağıdaki komutları sırasıyla uygulayınız.
Örnek: //bread deneme.txt 0 $file(deneme.txt).size &deneme
Açıklaması: deneme.txt dosyasının 0 pozisyonundan $file(deneme.txt).size byte-lık verisini/pozisyonunu &deneme değerine okutuyoruz.
Not: $file(deneme.txt).size, $file(deneme.txt) ve $lof(deneme.txt) tanımları belirtilen dosyanın boyutunu verir. Yani yukarıdaki işlemde <N> pozisyonuna dosyanın boyutunu belirttik.


2- /bwrite <filename> <S> [N] <text|%var|&binvar>
Bu komut, belirtilen dosyaya belirtilen text/metin - %var/değişken - &binvar/ikili değer yazdırmanıza yarar.
<S>: Yazdıracağınız veriyi dosyanın hangi pozisyonuna yazdıracağını belirlemenize yarar.
[N]: Yazıracağınız verinin hangi pozisyonundan itibaren yazdıracağınızı belirtmenize yarar.
Not: [N] kısmını girmek mecburi değildir.
Örnekler:
1. Örnek: /bwrite binary.txt 20 -1 DENEMEDİR!
Açıklaması: binary.txt dosyasının 20 <S> pozisyonuna, DENEMEDİR kelimesinin -1(tamamını)[N] pozisyonunu yazdırdık.
2. Örnek: /bwrite binary.txt -1 3 DENEME
Açıklaması: binary.txt dosyasının, -1(başlangıc) pozisyonuna, DENEME kelimesinin 3-lük pozisyonunu yazdırdık.
Açıklama 2: DENEME kelimesinin 3-lük pozisyonu, DEN olmaktadir. 4-lük pozisyonu deseydik, DENE olacaktı. -1 olarak belirtseydik DENEME kelimesinin tamamını yazdıracaktık.
Genel açıklama: /bwrite komutunda [N] noktası belirtmezseniz belirtilen verinin(text/%var/&binvar) tamamını yazdırırsınız. Yani -1 aynı işlevi görür.
Verileri yazdırdığınız dosyayı görmek için; /run binary.txt yapabilirsiniz.


3- /bset [-t] <&binvar> <N> <asciivalue> [asciivalue ... asciivalue]
Bu komut, belirtilen &ikili-variable -a asciivalue veya düz yazı kaydetmenize yarar.
Bu konunun biraz karışık olduğunu başta söylemiştim. Şimdi diyeceksinizki; "ascii-value nedir yahu?"
ASCII kelimesinin açılımı: American standard code for information interchange.
Manası: Bilgi alışverişi için standart amerikan kodu.
Açıklaması: Örneğin a harfinin ascii kodu "97" dir. Herhangi bir karakterin ascii kodunu öğrenmek için; $asc(karakter) tanımını kullanınız.
Value kelimesinin manası: Değer demektir.
Şimdi o soruyu sormazsınız artık/sanırım. .)
/bset komutu belirtilen ascii value kodunu veya düz yazıyı belirtilen <N> pozisyonuna kaydetmek için kullanılır.
Örneklerle daha iyi anlayacağınızı düşünerek örneklere geçiyorum.
Örnekler:
1. Örnek: //bset &d 1 $asc(d)
Açıklaması: &d variable-ının 1<N> pozisyonuna(başlangıc) d harfinin ascii kodunu($asc(d) => 100) yazdırdık.
2. Örnek: //bset &dd 10 $asc(d) $asc(e) $asc(n) $asc(e) $asc(m) $asc(e)
Açıklaması: &dd variable-ının 10<N> pozisyonuna belirtilen ascii kodlarını yazdırdık.
-
/bset komutu hakkında bazı bilgiler:
1- /bset komutu ile oluşturulan &variable kayıt edilmez. Yani bir nevi, /var komutu gibidir. /set komutu gibi kayıt etmez.
2- /bset komutunda <N> noktasını "0" olarak belirliyemezsiniz. En az "1" girmeniz gerekmektedir.
3- /bset komutunda <N> pozisyonunu 100 belirlerseniz ve 100. pozisyona kadar herhangi bir karakter mevcut değilse, 100. pozisyona kadar "0" olarak değer atanacak ve 100. pozisyona belirlediğiniz asciivalue veya yazı kaydedilecektir.
Not: Örneğin; //bset &d 3 $asc(d) yaptınız. Eğer 3 noktasına kadar herhangi bir karakter yoksa, &d variable-ı "0 0 100" şeklinde bir veri taşıyacaktır.
-
-t: Bu parametre ile belirtilen &variable-a text-string/düz yazı kayıt edersiniz.
Örnek: //bset -t &t 1 Bu bir denemedir.
Açıklaması: &t variable-ının 1<N> pozisyonuna "Bir bir denemedir." yazısını kaydettik.


4- /bunset <&binvar> [&binvar ... &binvar]
Bu komut belirtilen birnary &variable-larını silmek için kullanılır.
Örnek: /bunset &deneme
Açıklaması: &deneme variable-ı silindi.


5- /bcopy [-zc] <&binvar> <N> <&binvar> <S> <M>
Bu komut biraz karışıktır. Ama elimden geldiğince açıklamaya çalışacağım merak etmeyin.
/bcopy komutu en basit açıklama ile; belirtilen &variable -ı, ikinci belirtilen &variable-a copyalamanıza yarar.
Örnek: //bcopy &a 7 &b 1 -1
Açıklaması: &a variable-nın 7<N> pozisyonuna, &b variable-ının 1<S> pozisyonundan -1<M>(&b variable-ındaki verinin tamamı) pozisyonuna kadar olan kısmını kopyaladık.
Şu açıklama ile birşey anladığınız zannetmiyorum ama yapılan işlev budur. Ben size bu komutu daha iyi açıklamak için uzun bir örnek vereceğim.
Şimdi, diyelimki; &a variable-ının verisi DENEME, &b variable-ının veriside ORNEK olsun.
//bcopy &a 7 &b 1 -1 yaptığımızda; &a variable-ının değeri sadece DENEME iken, DENEMEORNEK olarak değişecektir.
Ve/yani ascii değerleride "68(D) 69(E) 78(N) 69(E) 77(M) 69(E)" iken, "68(D) 69(E) 78(N) 69(E) 77(M) 69(E) 79(O) 82(R) 78(N) 69(E) 75(K)" şeklinde olacaktır.
Eğer biz //bcopy &a 20 &b 1 -1 yapsadık, &a variable-ının yeni hali; "68(D) 69(E) 78(N) 69(E) 77(M) 69(E) 0 0 0 0 0 0 0 0 0 0 0 0 0 79(O) 82(R) 78(N) 69(E) 75(K)" olacaktı.
Bunun sebebi şudur; &a variable-ında DENEME verisi mevcut ve pozisyonuda 1den 7ye kadardır.(1(başlangıc) 7(DENEME kelimesinin kapsadığı pozisyon - $len(DENEME) + 1 => 7)) <N> pozisyonunu 20 olarak belirlediğimiz ve 7-den itibaren 20 pozisyonuna kadar herhangi bir karakter olmadığı için, yukarıdada belirttiğim gibi boş kısımlara "0" atandı. Ve &b variable-ı 20 pozisyonunun devamına(20 den 25e/$len(ORNEK) = 5) kopyalandı.
Sanırım dahada açıklayıcı olamazdım.
-
/bcopy hakkında bazı bilgiler:
1- /bcopy komutunda, 1. belirtilen &variable-a 2. &variable-daki veri kopyalanır.(yukarıdaki örnekde, &a veriable-ına &b variable-ında veriler belirlediğimiz pozisyonlarda kopyalandı)
2- Belirtilen <N> pozisyonu kopyalanacak olan verinin(2. &variable) 1. &variable-daki pozisyonudur.
Ek açıklama(2 için): Örneğin <N> pozisyonunu 10 girersek, kopyalanan(2. &variable) veri 1. &variable-ın 10 pozisyonuna kopyalanır.
3- Belirtilen <S> pozisyonu kopyalanan(2. &variable) &variable-daki verinin başlangıc pozisyonudur.
Ek açıklama(3 için): Örneğin kopyalanan(2. &variable) verideki 1-7 pozisyonunda "DENEME" verisi varsa ve biz <S> pozisyonunu 2 olarak girersek; veri "ENEME" olarak kopyalanacaktır.
4- Belirtilen <M> pozisyonu kopyalanan(2. &variable) &variable-daki <S>(bakınız: 3) pozisyonundan belirtilen pozisyona(<M>) kadar olan kısımdır.
Ek açıklama(4 için): Örneğin kopyalanan(2. &variable) verideki belirtilen <S> pozisyonu "DENEME" verisiyse ve biz <M> pozisyonunu "2" olarak girersek; veri "DE" olarak kopyalanacaktır. (3 girersek "DEN", 4 girersek "DENE" vs.)
5- Eğer <M> değeri -1 olarak girilirse, kopyalanan(2. &variable) verinin tamamı manasına gelir.
Ek açıklama(5 için): Örneğin kopyalanan(2. &variable) veri "DENEME DENEME2 DENEME3" ise, belirtilen <S> pozisyonundan itibaren verinin tamamı kopyalanır. (<s> 2 ise => "ENEME DENEME2 DENEME3" gibi vs.)
Parametre bilgileri:
-z: Kopyalanan(2. &variable) &variable-ın belirtilen <M> pozisyonunu "0"/değersiz olarak kopyalar.
-c: Birinci(kopya işlemi yapılan &variable) belirtilen <S> + <M> pozisyonunda parçalara ayrılır.


6- /breplace <&binvar> <oldvalue> <newvalue> [oldvalue newvalue...]
Bu komut, belirtilen &variable-daki ascii kodları veya belirtilen karakteri(oldvalue) yine belirttiğiniz(newvalue) karakteri ile değiştirir.
Örnek: //breplace &deneme E A
Açıklaması: &deneme variable-ındaki TÜM "E" karakterleri, "A" olarak değişti.
Not: Belirtilen oldvalue(değiştirelecek olan karakter/ascii kod vs.)ların tamamı, belirtilen newvalue(yeni karakter/ascii kod vs.) olarak değişir.


7- /btrunc <filename> <bytes>
Bu komut, belirtilen dosyanın byte(boyutunu) düşürür veya yükseltir.
Örnek: /btrunc deneme.txt 1050000
Açıklaması: deneme.txt dosyasının yeni boyutu 1050000 byte(1 MB)
Not: Eğer belirtilen dosyanın ojninal boyutundan düşük veya çok çok yüksek bir boyut belirlerseniz, dosya bozulabilir.

-

Binary files komutları bu kadardır.
Ama binary files için kullanılabilen 2 identifier/tanımımız mevcut.
Bunlarıda size açıklayacağım-ki- zaten bu identifier-lar olmadan yaptığımız işlemi göremeyiz. Yani anlayacağınız, bu identifier-lar binary files konusunun bel kemiğidir.

-

Binary files identifier/tanımları

1- $bvar(&binvar,N,M) - Prop: text, word, nword, long, nlong
Bu identifier belirtilen &variable-daki, N pozisyonundan M pozisyonuna kadar olan veriyi gösterir.
Örnekler:
-
1- //bset -t &deneme 1 Bu bir denemedir. | echo -: $bvar(&deneme,0) => 17
Açıklaması: &deneme variable-ındaki toplam ascii kod sayısını verir.
-
2- //bset -t &deneme 1 Bu bir denemedir. | echo -: $bvar(&deneme,1) => 66(B)
Açıklaması: &deneme variable-ındaki 1. pozisyonda olan ascii kodu verir.
-
3- //bset -t &deneme 1 Bu bir denemedir. | echo -: $bvar(&deneme,1).text => B(66)
Açıklaması: &deneme variable-ındaki 1. pozisyonda olan veriyi text verir.
-
4- //bset -t &deneme 1 Bu bir denemedir. | echo -: $bvar(&deneme,1-).text => Bu bir denemedir.
Açıklaması: &deneme variable-ındaki verinin tamamını(1-) text olarak verir.
-
5- //bset -t &deneme 1 Bu bir denemedir. | echo -: $bvar(&deneme,1,6).text => Bu bir
Açıklaması: &deneme variable-ındaki 1(N) pozisyonundan 6(M) pozisyonuna kadar olan kısmı text olarak verir.
-
6- //bset -t &deneme 1 Bu bir denemedir. | echo -: $bvar(&deneme,1,) => 66 117 32 98 105 114
Açıklaması: &deneme variable-ındaki 1(N) pozisyonundan 6(M) pozisyonuna kadar olan kısmı ascii kod olarak verir.
-
7- //write deneme.txt $str(A,100) | bread -t deneme.txt 0 $lof(deneme.txt) &deneme | echo -a $bvar(&deneme,1-).text
Açıklaması: deneme.txt dosyasını &deneme variable-ına okutursunuz. Ve &deneme variable-ındaki verinin tamamını text olarak verir.
-
Prop/özellik:
a- $bvar(&binvar,N,M).text: Algılanan/istenilen ascii kod(ları) text/karakter olarak gösterir.
b- $bvar(&binvar,N,M).word ve $bvar(&binvar,N,M).long: Algılnan/istenilen ascii kod(ların|un) host byte değerini verir.
c- $bvar(&binvar,N,M).nword ve $bvar(&binvar,N,M).nlong: Algılnan/istenilen ascii kod(ların|un) network byte değerini verir.


2- $bfind(&binvar, N, M) - Prop: text
Bu tanım belirtilen N pozisyonundan itibaren belirtilen M karakterini/ascii(0-255) kodu/düz text-i vs. arar ve konumunu gösterir.
-
Önekler:
1- //bset -t &deneme 1 Bu bir denemedir. | echo -: $bfind(&deneme,4,e)
Açıklaması: &deneme variable-ının 4<N> pozisyonundan itibaren olan veride(b[ir denemedir.]) "e" karakterinin ilk olarak kaçıncı sırada olduğunu gösterir. => "9"
Cevabı 9 almamızın sebebi; $bfind(&deneme,4,e) => bir denemedir. olarak dönecektir. Lakin verinin tamamı tabiki, "Bu bir denemedir." cümlesidir.
Yani isterseniz, veri sonundan(17<N> pozisyonundan => .) bir karakter aratsanız dahi, aratılan karakterin pozisyonu verinin tamamına göre verilecektir.
Şimdi buradaki ilk "e" karakteri kaçıncı sırada bakalım; //echo -: $iif($regex(ornek,Bu bir denemedir.,/(e)/g),$regml(ornek,1).pos) => 9 olarak dönmektedir.
-
2- //bset -t &deneme 1 Bu bir denemedir. | echo -: $bfind(&deneme,10,$asc(i))
Açıklaması: &deneme variable-ının 10<N> pozisyonundan itibaren olan kısımda(n[emedir.]) karşılaşılan ilk "105" ascii kodunun($chr(105) => i) hangi konumda olduğunu gösteriyoruz. => "15"
Cevabı 15 almamızın sebebi, 10<N> pozisyonundan itibaren karşılaşılan ilk "105(i)" ascii kodunun Bu bir de[n](10<N> pozisyonu)emed(karşılaşılan ilk 105(i) karakteri)r.
-
$bfind tanımı hakkında bazı bilgiler:
1- $bfind arama esnasında case-sensitive(büyük küçük harf duyarlı) şekilde arama yapmaz.
Örneğin aratacağınız harf "e" harfi ise ve siz aratılan verideki "E" harflerini kayda almasını istemiyorsanız; "E" harfinin ascii kodunu girerek aramalısınız.
Şöyleki: //bset -t &deneme 1 DENEMe | echo -: $bfind(&deneme,1,e) => 2 olarak dönecektir(DE[algılanan ilk e harfi]NEMe)
Ama şu şekilde yaparsanız: //bset -t &deneme 1 DENEMe | echo -: $bfind(&deneme,1,$asc(e)) => 6 olarak dönecektir(DENEMe[algılanan ilk 101 ascii kodu(e)]
-
Prop bilgisi:
Eğer aranılacak veriyi text/düz yazı olarak girerseniz, $bfind(&binvar,N,M).text karşılaşılan pozisyonu verecektir.
Eğer aranılacak veriyi ascii kod olarak girerseniz, $bfind(&binvar,N,M).text karşılaşılan pozisyonu her zaman 0 olarak verecektir.
Yani bu prop bir nevi sadece text aramak için kullanılır gibi.
Örnekler:
a- //bset -t &deneme 1 DERS | echo -: $bfind(&deneme,1,$asc(E)) => 2
b- //bset -t &deneme 1 DERS | echo -: $bfind(&deneme,1,$asc(E)).text => 0
c- //bset -t &deneme 1 DERS | echo -: $bfind(&deneme,1,D).text => 1

-

Binary files hakkında anlatabileceğim komut ve tanım açıklamalarının hepsi yukarıdakilerden ibarettir.
Şimdi ders sonuna bazı arkadaşlar şöyle bir soru sorabilir; "ee tamam güzelde bizim ne işimize yarayacak bu?"
Bu sorunuza cevaben bazı açıklamalar yapmak istiyorum.

1- mIRC Scripting-de bildiğiniz üzere %değişken-ler en fazla 900 karakter alabilmektedir. Ama binary &variable-ları ise sınırsız karakter alabilirler.
2- Binary files ile örneğin bir .bmp/.png/.(?) vs.dosyasının kaynak kodlarını görüntüleyebilirsiniz.
Örneğin, bir ".bmp" dosyasına sağ tıklayıp birlikte aç seçeneğinden NOT DEFTERİ/Notepad seçeneceğini seçtiğinizde, belirtilen ".bmp" dosyasının kaynak kodlarını görebilirsiniz.
İşte mIRC-de binary files ile bu işlemin aynısını yapabiliyoruz.
Örnek: //bread ders.bmp 0 $lof(ders.bmp) &file | echo -: $bvar(&file,0)
Açıklaması: ders.bmp dosyasındaki kaynak kodlarının toplam karakter sayısını verir.
-
Örnek: //bread ders.bmp 0 $lof(ders.bmp) &file | echo -: $bvar(&file,1,10)
Açıklaması: ders.bmp dosyasının 1<N>(başlangıc) ile 100(<M>) arasındaki kaynak kodlarının, ascii kodlarını gösterir.
Not: "0" olarak gösterilen yerlerde herhangi bir karakter bulunmamaktadır/değersizdir.
-
Örnek: //bread ders.bmp 0 $lof(ders.bmp) &file | bwrite ders.txt -1 &file
Açıklaması: ders.bmp dosyasının kaynak kodlarının tamamını ders.txt dosyasına yazdırdık.
Yazdırdığınız kaynak kodlarını görmek için: /run ders.txt yapabilirsiniz.

-

Binary files-ı nerelerde kullanabilirsiniz?
1- Yukarıda belirttiğim gibi belirtilen dosyanın kaynak kodlarını görüntüleyebilmek için kullanılabilir.
2- Socket ile herhangi bir veri çekerken kullanabilirsiniz.(/sockread -n &binvar)
Not: Socket ile binary variable-a veri çekmek hakkında ek bir ders yazılacaktır.
3- Belirlediğiniz dosyanın kaynak kodlarını belirlediğiniz dosyaya/&binary variable-a yazdırabilir, sonra tekrardan yazdırılan kaynak kodlarını orjinal dosya formatına çevirebilirsiniz.
Örnek: //bread ders.ico 0 $lof(ders.ico) &file | bwrite ders(2).ico -1 &file | run ders(2).ico
-
Birçok program binary files kullanmaktadır.
Örneğin; mIRC-de bulunan /copy -ao <filename> <filename>(dosya kopyalama) komutu internal olarak binary files kullanır.


Binary files hakkında anlatacaklarım bu kadardır.
Umarım artık binary files denildiği zaman aklınızda birşeyler canlanabilir.
Kolay gelsin.
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Elektronik Sigara Cicisex Porno
Üst