ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
ASSEMBLY
FOR HACKERS
Yaz Kampı'2019
19.08.2019 – 29.08.2019
EĞİTMEN : FARUK TUYGUN
ASSEMBLY NEDÄ°R?
• Bilgisayar programlarının yazılmasında kullanılan alt seviyeli bir dildir. Alt
seviye denilmesindeki sebep programlamanın Java, .NET gibi dillerden farklı
olarak bilgisayarın çalışma prensibi olan iki sayı sistemine en yakın
programlamayı yapabilmesidir.
• Diğer programlama dillerine göre daha zordur. Gelişmiş bir kullanıcı arayüzü
yoktur.
NEDEN ASSEMBLY?
Assembly ile yazılan programların elbette zorluğunun karşılığında avantajlarıda
mevcuttur.
• İşlemci üzerindeki komutlara aracısız erişim sağlanmaktadır.
• İşlemci gücünü en iyi ortaya koyan programlama dilidir.
• Hızlı çalıştığı için hız gerektiren uygulamalarda avantaj sağlar.
• Boyut olarak daha az yer kapladığı için daha az bellek tüketir.
BINARY SAYI SÄ°STEMÄ°
• Bilgisayar binary sayı sisteminde çalıştığı için binary sayı sisteminin
bilinmesi gerekmektedir.
• İkili sayı sistemi, konum gösterimi kullanır. Yani bir basamağın yazıldığı her
konum farklı bir değere sahiptir. Her pozisyon ikili sayı sisteminde 2’nin
katları şeklinde artar.
BINARY SAYI SÄ°STEMÄ°
• Verimizin 11100000 olduğu düşünüldüğünde en sağdaki bit (LSB) en değersiz bit
olarak adlandırılır. En soldaki bit ise en değerli bit (MSB) olarak
adlandırılır. Her bir konumun 2’nin 0’dan başlayarak 1’er artan bir üs değeri
vardır.
• Verilen sayının hesabı yapılırken, verinin değeri (0 veya 1) ile bulunduğu bit
sayısı 2n (n=bit numarası)ile çarpılarak tüm bitlerin toplanmasıyla elde
edilir. Bu örnekteki sayının değeri;
1.27 + 1.26 + 1.25 + 0.24 + 0.23 + 0.22 + 0.21 + 0.20 = 224
şeklinde hesaplanır.
HEXADECIMAL SAYI SÄ°STEMÄ°
• Bu sayı sisteminde rakamlar 0 ile
15 arasındadır. Bu sayı sisteminin
kuralına göre A,B,C,D,E,F,
harfleri sırasıyla
10,11,12,13,14,15 deÄŸerlerine
karşılık gelmektedir. Binary sayı
sisteminde gösterimi kısaltmak
için kullanılır.
• Aşağıdaki tabloda sayıların
Decimal, Binary ve Hexadecimal
karşılıkları verilmiştir. Onluk
sayı sistemi günlük hayatta
kullandığımız sayı sistemidir.
UYGULAMA - 1
VERÄ°LERÄ°N ADRESLENMESÄ°
İşlemcinin komutları yürütürken izlediği döngü fetch-decode-execute döngüsü
(uygulama döngüsü) olarak adlandırılır.
• Bu döngü üç sürekli adımdan oluşur;
• Komutları bellekten alma
• Komutları tanımlama
• Komutları uygulama
ASSEMBLY PROGRAMININ BÖLÜMLERİ
Assembly dili üç bölümden oluşur:
• Yürütülebilir komutlar
• Assembler kuralları veya sözde kodlar
• Makrolar
Yürütülebilir komutlar, işlemciye yapılacak işi söyleyen komutlardır.
Sözde kodlar, programın nasıl çalışacağından bahseder. Bu kodlar çalışmaz.
Makrolar, bir isimle atanan ve programın herhangi bir yerinde kullanılabilen
talimatlar dizisidir.
ASSEMBLY DİLİNİN BÖLÜMLERİ
• Data Section
Data section başlangıç verilerini veya sabitleri belirtmek için kullanılır.
Sabit değerler, dosya adları bu bölümde tanımlanır. "section.data" şeklinde
tanımlanır.
• Bss Section
Bu bölüm değişkenlerin tanımlandığı bölümdür. "section.bss" şeklinde tanımlanır.
• Text Section
Bu bölüm kodların bulunduğu bölümdür. Bu bölüm çekirdeğe programın çalışmaya
başladığını bildirir.
ASSEMBLY DÄ°LÄ°NÄ°N YAZIM KURALLARI
Assembly kodunun yazım şekli şöyledir:
[label] komut iÅŸlenen veriler [;yorum]
• Bu yazım kuralında parantez içindeki kısımlar isteğe bağlıdır. Yazım
kurallarında iki tane vazgeçilmez eleman bulunur. İlki çalıştırılacak komut,
ikincisi iÅŸlenecek veri.
Assembly diliyle yazılmış bazı kod örnekleri aşağıdaki gibidir.
$ INC COUNT
$ MOV LEVEL,48
$ ADD AH,BH
SEGMENTLER
Data Segment
.data ve .bss ile gösterilir. .data bölümü veri elemanlarının program için
saklandığı bellek bölgesini bildirmek için kullanılır.
Code Segment
.text ile gösterilen kısımdır. Bu alan, komutları saklayan bölgeyi gösterir.
Sabit bir alandır.
Stack(Yığın)
Bu bölüm geçici depolama alanı olarak kullanılır. Yığın, LIFO mantığı ile
çalışır. (Last İn First Out). Eklenen veriler yığının üst kısmına eklenir ve üst
kısmında çıkar. Yığının üst kısmına veri ekleme PUSH, verinin üst kısmından veri
çıkarma POP olarak adlandırılır.
ENDIANNESS
• İnsanların soldan sağa veya sağdan sola alfabelere sahip olmaları gibi
işlemciler de baytları saklarken önemli byte'ın solda veya sağda olmasına göre
sınıflandırılır. Buna endianness denir. Diğer bir anlatım ile endianness, byte
sıralamasıdır.
• Değerli byte'ın solda olduğu sıralamaya big-endian (düz sıralı) denir.
• Değerli byte'ın sağda olduğu sıralamaya ise little-endian (ters sıralı) denir.
GENERAL REGISTERS
Data Registers
Data registerlar aritmetik ve mantıksal işlemler için kullanılırlar.
Pointer Registers
Hafızada adreslerinin tutulmasında kullanılırlar.
Index Registers
Hedef ve kaynak adreslerinin tutulmasında kullanılırlar.
CONTROL REGISTERS
• 32 bit intruction register ve 32 bit flag registerı, control registers olarak
kabul edilir.
• Birçok komut, matematiksel hesaplamaları içerir ve flag durumunu değiştirir.
• Bazı durumlarda başka fonksiyona dallanma işleminin olup olmayacağını
flaglardan kontrol eder.
SEGMENT REGISTERS
Code Segment
• Yürütülecek olan tüm komutları içerir.16 bitlik bir code segment register veya
CS registerı kodun başladığı alanın adresini saklar.
Data Segment
• Veri,sabitler ve çalışma alanlarının adresleri burada tutulur.16 bitlik bir
data register(DS), data bölümünün başlangıç adresini tutar.
Stack Segment
• Bir fonksiyonun dönüş adresini tutar. Stack yapısı uygulanır (LIFO).Stack
register(SS) stack başlangıç adresini tutar.
UYGULAMA - 2
SEGMENT REGISTERS
LINUX SÄ°STEM Ç´¡Äž¸é±õ³¢´¡¸é±õ
Sistem çağrıları, kullanıcı ile çekirdek arasında arayüz için kullanılan
API’lerdir.
Yazılan Assembly programında Linux sistem çağrılarını kullanabilmek için aşağıdaki
adımlar uygulanmalıdır.
• EAX registerına sistem çağrı numarası eklenir.
• Argümanlar registerlarda (EBX,ECX gibi) sistem çağrısına kaydedilir.
• Uygun olan kesme çağrılır.(80h)
• İşlem sonucunda çıkan sonuç genellikle EAX registerına döndürülür.
LINUX SÄ°STEM Ç´¡Äž¸é±õ³¢´¡¸é±õ
STACK ve HEAP
• Yazılan programlar çalıştırılırken hafızada yer kaplar.
• Kapladığı yer kimi zaman belliyken kimi zamanda program esnasında kullanıcının
gireceği verilere göre değişebilir.
• Program esnasında boyutları bildirilmiş değişmez değerler kullanılıyorsa stack,
değişebilir değerler kullanılıyorsa heap kullanılması tavsiye edilir.
STACK ve HEAP
INC, DEC, ADD, SUB
• Bir değeri birer birer arttırmak için INC komutu kullanılır.
>> INC [destination]
• Bir değeri birer birer azaltmak için DEC komutu kullanılır.
>> DEC [destination]
• İki değeri toplamak için ADD komutu, iki değeri birbirinden çıkarmak için SUB
komutu kullanılır.
>> ADD eax,ebx
>> SUB eax,ebx
MUL/IMUL, DIV/IDIV
• Çarpma işlemi yapmak için kullanılan komut MUL'dur. İşaretli sayılarda çarpma
yapılmak istendiğinde IMUL komutu kullanılır.
• Bölme işlemi yapmak için kullanılan komut DIV, işaretli sayılarda bölme yapmak
için kullanılan komut IDIV'dir.
AND, OR, XOR, TEST, NOT
• AND komutunda iki bitin değeri de 1 ise o zaman sonuç 1 olur. Geri kalan tüm
durumlarda sonuç sıfır olur.
• OR komutunda sonucun 1 olması için herhangi bir bitin 1 olması yeterlidir.
• XOR komutunda ise bitler aynıysa sonuç 0, bitler farklıysa sonuç 1 olur.
• TEST komutu AND komutunun aynısıdır ancak çıkan sonuç PF,SF ve ZF bayraklarını
etkiler. Bir sayının çift mi tek mi olduğu bulunurken kullanılabilir.
• NOT komutu bir bit olarak işlem gerçekleştirir. Bir işlemcide bulunan tüm bitler
bu komut sayesinde tersine çevrilebilir.
UYGULAMA - 3
KoÅŸullu ve KoÅŸulsuz Dallanma
• Bu JMP komutu ile gerçekleştirilir. Koşullu dallanma, çoğunlukla, yürütülen
komutu takip etmeyen bir komut adresinde iÅŸleme devam etmeyi emreder.
• Bu duruma göre j<koşulu> ile gerçekleştirilir. Koşullu komutlar ardışık akışı
bozarak kontrolü devreder ve offset değerini değiştirerek bunu yaparlar.
KoÅŸullu ve KoÅŸulsuz Dallanma
UYGULAMA - 4
LOOP
• "JMP" Komutu ile döngü oluşturulabileceği gibi Assembly komut setinde "loop"
komutu da mevcuttur.
• "loop" komutu ECX register'ının döngü sayısını tuttuğunu varsayar.
• Döngü her gerçekleştiğinde ECX register'ının içeriği azaltılır. ECX
register'ının içeriği sıfırlandığında döngü tamamlanır.
UYGULAMA - 5
PROCEDURES
• Fonksiyonlar bir isim ile tanımlanır. Daha sonra yapacağı işler yazıldıktıktan
sonra "ret" komutu ile bitirilir.
• CALL komutu kullanılarak fonksiyon başka bir fonksiyondan çağrılabilir.
>> CALL func_name
MACRO
• Modüler, yönetimi kolay bir program yazmanın bir diğer yolu da makrolardır.
• Makro, bir isimle atanan ve programın herhangi bir yerinde kullanılabilen
komutlar dizisidir.
• NASM'da makrolar %macro - %endmacro komutlarıyla kullanılabilir.
• %macro macronun başladığını %endmacro bittiğini belirtir.
UYGULAMA - 6
FILE DESCRIPTOR
• File decsriptor, bir dosyaya veya ağ soketi gibi başka bir giriş / çıkış
kaynağına erişmek için kullanılan soyut bir göstergedir.
• Yeni bir dosya oluştuğu zaman veya mevcut dosya açıldığı zaman dosyaya erişmek
için bu ID numarası kullanılır.
• Standart dosya akışlarının dosya tanımlayıcısı stdin, stdout, stderr sırasıyla
0,1,2'dir.
FILE POINTER
• File pointer, dosyada okuma/yazma işleminin konumunu byte cinsinden belirtir.
• Her dosya byte dizisi olarak kabul edilir. Her açık dosya, dosyanın başlangıcına
göre byte cinsinden bir uzaklık belirten bir file pointer ile ilişkilendirilir.
• Dosya açıldığında file pointer resetlenir.
DOSYA Ä°ÅžLEME SÄ°STEM Ç´¡Äž¸é±õ³¢´¡¸é±õ

More Related Content

Assembly for Hackers

  • 1. ASSEMBLY FOR HACKERS Yaz Kampı'2019 19.08.2019 – 29.08.2019 EĞİTMEN : FARUK TUYGUN
  • 2. ASSEMBLY NEDÄ°R? • Bilgisayar programlarının yazılmasında kullanılan alt seviyeli bir dildir. Alt seviye denilmesindeki sebep programlamanın Java, .NET gibi dillerden farklı olarak bilgisayarın çalışma prensibi olan iki sayı sistemine en yakın programlamayı yapabilmesidir. • DiÄŸer programlama dillerine göre daha zordur. GeliÅŸmiÅŸ bir kullanıcı arayüzü yoktur.
  • 3. NEDEN ASSEMBLY? Assembly ile yazılan programların elbette zorluÄŸunun karşılığında avantajlarıda mevcuttur. • Ä°ÅŸlemci üzerindeki komutlara aracısız eriÅŸim saÄŸlanmaktadır. • Ä°ÅŸlemci gücünü en iyi ortaya koyan programlama dilidir. • Hızlı çalıştığı için hız gerektiren uygulamalarda avantaj saÄŸlar. • Boyut olarak daha az yer kapladığı için daha az bellek tüketir.
  • 4. BINARY SAYI SÄ°STEMÄ° • Bilgisayar binary sayı sisteminde çalıştığı için binary sayı sisteminin bilinmesi gerekmektedir. • Ä°kili sayı sistemi, konum gösterimi kullanır. Yani bir basamağın yazıldığı her konum farklı bir deÄŸere sahiptir. Her pozisyon ikili sayı sisteminde 2’nin katları ÅŸeklinde artar.
  • 5. BINARY SAYI SÄ°STEMÄ° • Verimizin 11100000 olduÄŸu düşünüldüğünde en saÄŸdaki bit (LSB) en deÄŸersiz bit olarak adlandırılır. En soldaki bit ise en deÄŸerli bit (MSB) olarak adlandırılır. Her bir konumun 2’nin 0’dan baÅŸlayarak 1’er artan bir üs deÄŸeri vardır. • Verilen sayının hesabı yapılırken, verinin deÄŸeri (0 veya 1) ile bulunduÄŸu bit sayısı 2n (n=bit numarası)ile çarpılarak tüm bitlerin toplanmasıyla elde edilir. Bu örnekteki sayının deÄŸeri; 1.27 + 1.26 + 1.25 + 0.24 + 0.23 + 0.22 + 0.21 + 0.20 = 224 ÅŸeklinde hesaplanır.
  • 6. HEXADECIMAL SAYI SÄ°STEMÄ° • Bu sayı sisteminde rakamlar 0 ile 15 arasındadır. Bu sayı sisteminin kuralına göre A,B,C,D,E,F, harfleri sırasıyla 10,11,12,13,14,15 deÄŸerlerine karşılık gelmektedir. Binary sayı sisteminde gösterimi kısaltmak için kullanılır. • AÅŸağıdaki tabloda sayıların Decimal, Binary ve Hexadecimal karşılıkları verilmiÅŸtir. Onluk sayı sistemi günlük hayatta kullandığımız sayı sistemidir.
  • 8. VERÄ°LERÄ°N ADRESLENMESÄ° Ä°ÅŸlemcinin komutları yürütürken izlediÄŸi döngü fetch-decode-execute döngüsü (uygulama döngüsü) olarak adlandırılır. • Bu döngü üç sürekli adımdan oluÅŸur; • Komutları bellekten alma • Komutları tanımlama • Komutları uygulama
  • 9. ASSEMBLY PROGRAMININ BÖLÃœMLERÄ° Assembly dili üç bölümden oluÅŸur: • Yürütülebilir komutlar • Assembler kuralları veya sözde kodlar • Makrolar Yürütülebilir komutlar, iÅŸlemciye yapılacak iÅŸi söyleyen komutlardır. Sözde kodlar, programın nasıl çalışacağından bahseder. Bu kodlar çalışmaz. Makrolar, bir isimle atanan ve programın herhangi bir yerinde kullanılabilen talimatlar dizisidir.
  • 10. ASSEMBLY DÄ°LÄ°NÄ°N BÖLÃœMLERÄ° • Data Section Data section baÅŸlangıç verilerini veya sabitleri belirtmek için kullanılır. Sabit deÄŸerler, dosya adları bu bölümde tanımlanır. "section.data" ÅŸeklinde tanımlanır. • Bss Section Bu bölüm deÄŸiÅŸkenlerin tanımlandığı bölümdür. "section.bss" ÅŸeklinde tanımlanır. • Text Section Bu bölüm kodların bulunduÄŸu bölümdür. Bu bölüm çekirdeÄŸe programın çalışmaya baÅŸladığını bildirir.
  • 11. ASSEMBLY DÄ°LÄ°NÄ°N YAZIM KURALLARI Assembly kodunun yazım ÅŸekli şöyledir: [label] komut iÅŸlenen veriler [;yorum] • Bu yazım kuralında parantez içindeki kısımlar isteÄŸe baÄŸlıdır. Yazım kurallarında iki tane vazgeçilmez eleman bulunur. Ä°lki çalıştırılacak komut, ikincisi iÅŸlenecek veri. Assembly diliyle yazılmış bazı kod örnekleri aÅŸağıdaki gibidir. $ INC COUNT $ MOV LEVEL,48 $ ADD AH,BH
  • 12. SEGMENTLER Data Segment .data ve .bss ile gösterilir. .data bölümü veri elemanlarının program için saklandığı bellek bölgesini bildirmek için kullanılır. Code Segment .text ile gösterilen kısımdır. Bu alan, komutları saklayan bölgeyi gösterir. Sabit bir alandır. Stack(Yığın) Bu bölüm geçici depolama alanı olarak kullanılır. Yığın, LIFO mantığı ile çalışır. (Last Ä°n First Out). Eklenen veriler yığının üst kısmına eklenir ve üst kısmında çıkar. Yığının üst kısmına veri ekleme PUSH, verinin üst kısmından veri çıkarma POP olarak adlandırılır.
  • 13. ENDIANNESS • Ä°nsanların soldan saÄŸa veya saÄŸdan sola alfabelere sahip olmaları gibi iÅŸlemciler de baytları saklarken önemli byte'ın solda veya saÄŸda olmasına göre sınıflandırılır. Buna endianness denir. DiÄŸer bir anlatım ile endianness, byte sıralamasıdır. • DeÄŸerli byte'ın solda olduÄŸu sıralamaya big-endian (düz sıralı) denir. • DeÄŸerli byte'ın saÄŸda olduÄŸu sıralamaya ise little-endian (ters sıralı) denir.
  • 14. GENERAL REGISTERS Data Registers Data registerlar aritmetik ve mantıksal iÅŸlemler için kullanılırlar. Pointer Registers Hafızada adreslerinin tutulmasında kullanılırlar. Index Registers Hedef ve kaynak adreslerinin tutulmasında kullanılırlar.
  • 15. CONTROL REGISTERS • 32 bit intruction register ve 32 bit flag registerı, control registers olarak kabul edilir. • Birçok komut, matematiksel hesaplamaları içerir ve flag durumunu deÄŸiÅŸtirir. • Bazı durumlarda baÅŸka fonksiyona dallanma iÅŸleminin olup olmayacağını flaglardan kontrol eder.
  • 16. SEGMENT REGISTERS Code Segment • Yürütülecek olan tüm komutları içerir.16 bitlik bir code segment register veya CS registerı kodun baÅŸladığı alanın adresini saklar. Data Segment • Veri,sabitler ve çalışma alanlarının adresleri burada tutulur.16 bitlik bir data register(DS), data bölümünün baÅŸlangıç adresini tutar. Stack Segment • Bir fonksiyonun dönüş adresini tutar. Stack yapısı uygulanır (LIFO).Stack register(SS) stack baÅŸlangıç adresini tutar.
  • 19. LINUX SÄ°STEM Ç´¡Äž¸é±õ³¢´¡¸é±õ Sistem çaÄŸrıları, kullanıcı ile çekirdek arasında arayüz için kullanılan API’lerdir. Yazılan Assembly programında Linux sistem çaÄŸrılarını kullanabilmek için aÅŸağıdaki adımlar uygulanmalıdır. • EAX registerına sistem çaÄŸrı numarası eklenir. • Argümanlar registerlarda (EBX,ECX gibi) sistem çaÄŸrısına kaydedilir. • Uygun olan kesme çaÄŸrılır.(80h) • Ä°ÅŸlem sonucunda çıkan sonuç genellikle EAX registerına döndürülür.
  • 21. STACK ve HEAP • Yazılan programlar çalıştırılırken hafızada yer kaplar. • Kapladığı yer kimi zaman belliyken kimi zamanda program esnasında kullanıcının gireceÄŸi verilere göre deÄŸiÅŸebilir. • Program esnasında boyutları bildirilmiÅŸ deÄŸiÅŸmez deÄŸerler kullanılıyorsa stack, deÄŸiÅŸebilir deÄŸerler kullanılıyorsa heap kullanılması tavsiye edilir.
  • 23. INC, DEC, ADD, SUB • Bir deÄŸeri birer birer arttırmak için INC komutu kullanılır. >> INC [destination] • Bir deÄŸeri birer birer azaltmak için DEC komutu kullanılır. >> DEC [destination] • Ä°ki deÄŸeri toplamak için ADD komutu, iki deÄŸeri birbirinden çıkarmak için SUB komutu kullanılır. >> ADD eax,ebx >> SUB eax,ebx
  • 24. MUL/IMUL, DIV/IDIV • Çarpma iÅŸlemi yapmak için kullanılan komut MUL'dur. Ä°ÅŸaretli sayılarda çarpma yapılmak istendiÄŸinde IMUL komutu kullanılır. • Bölme iÅŸlemi yapmak için kullanılan komut DIV, iÅŸaretli sayılarda bölme yapmak için kullanılan komut IDIV'dir.
  • 25. AND, OR, XOR, TEST, NOT • AND komutunda iki bitin deÄŸeri de 1 ise o zaman sonuç 1 olur. Geri kalan tüm durumlarda sonuç sıfır olur. • OR komutunda sonucun 1 olması için herhangi bir bitin 1 olması yeterlidir. • XOR komutunda ise bitler aynıysa sonuç 0, bitler farklıysa sonuç 1 olur. • TEST komutu AND komutunun aynısıdır ancak çıkan sonuç PF,SF ve ZF bayraklarını etkiler. Bir sayının çift mi tek mi olduÄŸu bulunurken kullanılabilir. • NOT komutu bir bit olarak iÅŸlem gerçekleÅŸtirir. Bir iÅŸlemcide bulunan tüm bitler bu komut sayesinde tersine çevrilebilir.
  • 27. KoÅŸullu ve KoÅŸulsuz Dallanma • Bu JMP komutu ile gerçekleÅŸtirilir. KoÅŸullu dallanma, çoÄŸunlukla, yürütülen komutu takip etmeyen bir komut adresinde iÅŸleme devam etmeyi emreder. • Bu duruma göre j<koÅŸulu> ile gerçekleÅŸtirilir. KoÅŸullu komutlar ardışık akışı bozarak kontrolü devreder ve offset deÄŸerini deÄŸiÅŸtirerek bunu yaparlar.
  • 30. LOOP • "JMP" Komutu ile döngü oluÅŸturulabileceÄŸi gibi Assembly komut setinde "loop" komutu da mevcuttur. • "loop" komutu ECX register'ının döngü sayısını tuttuÄŸunu varsayar. • Döngü her gerçekleÅŸtiÄŸinde ECX register'ının içeriÄŸi azaltılır. ECX register'ının içeriÄŸi sıfırlandığında döngü tamamlanır.
  • 32. PROCEDURES • Fonksiyonlar bir isim ile tanımlanır. Daha sonra yapacağı iÅŸler yazıldıktıktan sonra "ret" komutu ile bitirilir. • CALL komutu kullanılarak fonksiyon baÅŸka bir fonksiyondan çaÄŸrılabilir. >> CALL func_name
  • 33. MACRO • Modüler, yönetimi kolay bir program yazmanın bir diÄŸer yolu da makrolardır. • Makro, bir isimle atanan ve programın herhangi bir yerinde kullanılabilen komutlar dizisidir. • NASM'da makrolar %macro - %endmacro komutlarıyla kullanılabilir. • %macro macronun baÅŸladığını %endmacro bittiÄŸini belirtir.
  • 35. FILE DESCRIPTOR • File decsriptor, bir dosyaya veya aÄŸ soketi gibi baÅŸka bir giriÅŸ / çıkış kaynağına eriÅŸmek için kullanılan soyut bir göstergedir. • Yeni bir dosya oluÅŸtuÄŸu zaman veya mevcut dosya açıldığı zaman dosyaya eriÅŸmek için bu ID numarası kullanılır. • Standart dosya akışlarının dosya tanımlayıcısı stdin, stdout, stderr sırasıyla 0,1,2'dir.
  • 36. FILE POINTER • File pointer, dosyada okuma/yazma iÅŸleminin konumunu byte cinsinden belirtir. • Her dosya byte dizisi olarak kabul edilir. Her açık dosya, dosyanın baÅŸlangıcına göre byte cinsinden bir uzaklık belirten bir file pointer ile iliÅŸkilendirilir. • Dosya açıldığında file pointer resetlenir.
  • 37. DOSYA Ä°ÅžLEME SÄ°STEM Ç´¡Äž¸é±õ³¢´¡¸é±õ