BİL 220 Sistem Programlamaya Giriş

Benzer belgeler
BBM 341 Sistem Programlama

BİL 220 Sistem Programlamaya Giriş

BİL 220 Sistem Programlamaya Giriş

BİL 220 Sistem Programlamaya Giriş

BBM 341 Sistem Programlama

C İLE BUFFER OVERFLOW-2

Linux Assembly Programlamaya Giriş

Komut Seti Mimarisi (ISA)

Bölüm 3: Adresleme Modları. Chapter 3: Addressing Modes

Bahar Dönemi. Öğr.Gör. Vedat MARTTİN

HACETTEPE ÜNİVERSİTESİ BAHAR DÖNEMİ

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Bit, Byte ve Integer. BIL-304: Bilgisayar Mimarisi. Dersi veren öğretim üyesi: Yrd. Doç. Dr. Fatih Gökçe

Sınav tarihi : Süre : 60 dak.

8086 dan core2 ya yazaç yapısını tanımak. Bayrak yazacının içeriğinde yer alan bayrakların görevlerini tanımlamak. Real mod çalışmada bellek

Big Endian & Little Endian K.Atilla Toker İzmir Üniversitesi Meslek Yüksek Okulu Bilgisayar Programcılığı Ver:01

Ders 3 ADRESLEME MODLARI ve TEMEL KOMUTLAR

Bigisayar Programlama

Komut Seti Mimarisi (ISA)

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

Arasınav Sınavı Soruları Güz 2017 Süre: 90 Dakika

MTM 305 MĠKROĠġLEMCĠLER

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

8. İŞARETCİLER (POINTERS)

HACETTEPE ÜNİVERSİTESİ BAHAR DÖNEMİ

Özet DERS 5. Şu ana kadar bilmeniz gerekenler... İşaretsiz Çarpma. Bayraklardaki Durumlar. İşaretli Çarpma

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Final Sınavı Soruları Güz, Süre: 90 Dakika

PROGRAMLAMAYA GİRİŞ DERS 2

CSD İŞLETİM SİSTEMİNDE SİSTEM FONKSİYONLARININ ÇAĞIRILMASI

Fonksiyonlar -Genel Test- A

8086 Mikroişlemcisi Komut Seti

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

TEMPLATES. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

MTM 305 MİKROİŞLEMCİLER

HACETTEPE ÜNİVERSİTESİ BAHAR DÖNEMİ

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

C PROGRAMLAMA D İ L İ

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

C Programlama Dilinde Değişkenler

MTM 305 MİKROİŞLEMCİLER

Karakter katarları ile ilgili fonksiyonlar içerir Yerel kayan noktalı sayılar tanımlanır

Bölüm 10. Altprogramları Uygulamak

OMÜ HAVACILIK VE UZAY BİLİMLERİ FAKÜLTESİ METEOROLOJİ MÜHENDİSLİĞİ BÖLÜMÜ MET103 BİLGİSAYAR PROGRAMLAMA I BÜTÜNLEME SINAVI

Yrd. Doç. Dr. Caner ÖZCAN

Adım Adım C-II. Eksik kalmış konular

Bölüm 5: ARITMETIK VE MANTIK IŞLEM YAPAN KOMUTLAR

INTEGER OVERFLOW ***************************************************************/

Hafta 13 Fonksiyonlar

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

BİLG Dr. Mustafa T. Babagil 1

C Programlama printf() Fonksiyonu

ELN1001 BİLGİSAYAR PROGRAMLAMA I

MAK 1005 Bilgisayar Programlamaya Giriş C DİLİNE GİRİŞ. Prof. Dr. Necmettin Kaya

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

int faktoriyel(int sayi) { int sonuc = 1; for(int i=sayi;i>0;i--) sonuc*=i; return sonuc; } int main() { int sayi = faktoriyel(5); }

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

Adresleme Modları. Mikroişlemciler ve Mikrobilgisayarlar

Temel Giriş/Çıkış Fonksiyonları

Yrd. Doç. Dr. Caner ÖZCAN

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı Đlkbahar Dönemi 13 Nisan Ad, Soyad Öğrenci No.

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Bölüm 2 - C ile Programlamaya Giriş

BİL 423 Bilgisayar Mimarisi 1. Ara Sınavı

BIL 362 Mikroilemciler Dersi Final Sınavı Cevapları

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

void main() { int a[] = {1, 2, 3, 4, 5, 6}; int *p=&a[2]; int **pp=&p; printf("%d", **pp+2); }

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

Mikrobilgisayar Mimarisi ve Programlama

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

HAZIRLAYAN BEDRİ SERTKAYA Sistem Uzmanı CEH EĞİTMENİ

Dr. Fatih AY Tel: fatihay@fatihay.net

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Eln 1001 Bilgisayar Programlama I

Giris {\} /\ Suhap SAHIN Onur GÖK

BLM 111 ALGORİTMA VE PROGRAMLAMA I

Başkent Üniversitesi Mühendislik Fakültesi Güz Yarıyılı BİL 101-Bilgisayar Yazılımı I Arasınavı

ATATÜRK ÜNİVERSİTESİ BİLGISAYAR MÜHENDİSLİĞİ BÖLÜMÜ BM 104- NESNEYE YÖNELİK PROGRAMLAMA DERSİ BAHAR DÖNEMİ ÖDEV-3

Ders Özeti. Ders 2. PC nin İç Organizasyonu. Mikroişlemcinin Organizasyonu. Basitçe İşlemciyi Oluşturan Parçalar. Mikroişlemciler

Mifare Kart Yazıcı/Okuyucu Modül (MFM-200)

Proses. Prosesler 2. İşletim Sistemleri

PROSESLER. Proses. Proses

NESNE TABANLI PROGRAMLAMA Final Sınavı Cevapları

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

16 bitlik işlemciler basit olarak 8 bitlik işlemciler gibi Kaydedici ALU Zamanlama/kontrol

Quiz:8086 Mikroişlemcisi Mimarisi ve Emirleri

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

Adı Soyadı : Öğrenci No :

BLM111 Programlama Dilleri I. Hafta 10 Diziler. Yrd. Doç. Dr. Caner ÖZCAN

Transkript:

Öğrenci Adı Soyadı: Öğrenci Numarası: S S S S4 S Toplam Hacettepe Üniversitesi Bilgisayar Mühendisliği Bölümü BİL 0 Sistem Programlamaya Giriş. Ara Sınav Tarih: Mayıs 0 Süre: 0 dak. Sınava başlamadan önce aşağıda yazılanları mutlaka okuyunuz! Bu sınav kapalı kaynak bir sınavdır. Yani sınav süresince ilgili ders kitapları veya ders notlarınızdan faydalanmanız yasaktır. Size yardımcı olması açısından sonraki sayfada bazı Intel IA/x8-4 Assembly komutlarının söz dizimleri ve diğer bazı ilgili tanımlar verilmiştir. Sınavda kopya çekmek yasaktır. Kopya çekmeye teşebbüs edenler hakkında ilgili idare işlemler kesinlikle başlatılacaktır. Her bir sorunun toplam ağırlığı soru numarasının ardında parantez içinde belirtilmiştir. Sınav toplam 0 puan üzerinden değerlendirilecektir. Sınav bu kapak sayfası dahil toplam sayfadan oluşmaktadır. Lütfen kontrol ediniz! BAŞARILAR! Sayfa

Sıçrama İşlemleri Aritmetik İşlemler Sıçrama Koşul Format İşlem jmp addl Src,Dest Dest = Dest + Src je ZF subl Src,Dest Dest = Dest - Src jne ~ZF imull Src,Dest Dest = Dest * Src js SF sall Src,Dest Dest = Dest << Src jns ~SF sarl Src,Dest Dest = Dest >> Src jg ~(SF^OF)&~ZF shrl Src,Dest Dest = Dest >> Src jge ~(SF^OF) xorl Src,Dest Dest = Dest ^ Src jl (SF^OF) andl Src,Dest Dest = Dest & Src jle (SF^OF) ZF orl Src,Dest Dest = Dest Src ja ~CF&~ZF incl Src Dest = Dest + jb CF decl Src Dest = Dest - negl Src Dest = - Dest notl Src Dest = ~ Dest Bellek İşlemleri Format (Rb, Ri) D(Rb, Ri) (Rb, Ri, S) İşlem Mem[Reg[Rb]+Reg[Ri]] Mem[Reb[Rb]+Reg[Ri]+D] Mem[Reg[Rb]+S*Reg[Ri]] Yazmaçlar (Registers) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%8%7%%%%%%%%%%%0% %rax %eax %ax %ah %al Return value Linux Yığıt (Stack) Yapısı %rbx %rcx %ebx %bx %bh %bl %ecx %cx %ch %cl Callee saved Argument #4 Caller Frame% %rdx %rsi %rdi %edx %dx %dh %dl %esi %si %sil %edi %di %dil Argument # Argument # Argument # %ebp Arguments% Return%Addr% Old%%ebp% %rbp %rsp %r8 %r9 %ebp %bp %esp %sp %r8d %r8w %r9d %r9w %bpl %spl %r8b %r9b Callee saved Stack Pointer Argument # Argument # Saved Registers + Local Variables% %r0 %r %r %r0d %r0w %rd %rw %rd %rw %r0b %rb %rb Reserved Used for linking Callee saved %esp Argument Build% %r %rd %rw %rb Callee saved %r4 %r4d %r4w %r4b Callee saved %r %rd %rw %rb Callee saved Sayfa

Özel Hizalama Durumları (Intel IA) byte: char,... sınırlandırma yok bytes: short,... en düşük bit adresi 0 4 bytes: int, float, char *,... en düşük bit adresi 00 8 bytes: double,... Windows: en düşük bit adresi 000 Linux: en düşük bit adresi 00 C Veri Tipi IA- X8-4 char short int 4 4 long 4 8 long long 8 8 float 4 4 double 8 8 long double 0/ 0/ pointer 4 8 bytes: long double Windows & Linux: en düşük bit adresi 00 Özel Hizalama Durumları (Intel x8-4) byte: char,... sınırlandırma yok bytes: short,... en düşük bit adresi 0 4 bytes: int, float,... en düşük bit adresi 00 8 bytes: double, char *,... Windows & Linux: en düşük bit adresi 000 bytes: long double Linux: en düşük bit adresi 000 Bayt Sıralama (Byte Ordering) 0x00 adresinde 4-bayt lık değişken 0x047 Big Endian En anlamsız bayt en yüksek adreste 0x00 0x0 0x0 0x0! 0% % 4% 7% Little Endian En anlamsız bayt en düşük adreste 0x00 0x0 0x0 0x0! 7% 4% % 0% Kayan noktalı sayı (floating point) Bias = k- Sayfa

Soru. (0 puan) Arabellek taşması (Buffer overflow). Buflab ödevinizde gets fonksiyonunun açığından yararlanarak çeşitli arabellek taşma saldırıları nasıl gerçekleştirilir onu deneyimlediniz. Ancak pratikte gcc derleyicisi, gets fonksiyonunun kullanımını tespit ettiğinde programcıyı bu fonksiyonun güvenli olmadığı konusunda uyarmaktadır. Kamil, kodlama yaparken gets gibi güvenli olmayan fonksiyonlardan uzak durduğu sürece arabellek taşma saldırılarından korunduğunu düşünmektedir. Aşağıda Kamil in yazdığı bir kod verilmiştir. NOT: Bu kodun -bit Little-Endian bir makinede bir uyarı mesajı almadan hatasız derlendiğini varsayınız. #include <stdio.h> void sifre_gir() { char sifre[8]; scanf("%s",sifre); void hodrimeydan() { printf("acigimi buldunuz!!!\n"); int main(void) { printf("sifre: "); sifre_gir(); return 0; test.c Bu soruda Kamil in bu düşüncesinin yanlış olduğunu hodrimeydan fonksiyonuna bir çağrı gerçekleştirerek kanıtlamanız istenmektedir. Kamil in test programını yarattığı klasörün altında çalıştığınızı ve komut satırında aşağıdaki komut zincirini çalıştırdığınızı düşünün../hexraw < exploit./test burada exploit saldırıda kullandığınız kodun onaltılı sayı düzenindeki karşılığını içeren bir metin dosyasıdır. Bu güvenlik açığını Kamil e kanıtlamak için exploit dizisinin içeriği ne olmalıdır? NOT: Cevabınızda peşi sıra gelen n rastgele bayt için [n] gösterimini kullanabilirsiniz. Sayfa 4

test programının objdump ile elde edilen Assembly çıktısı (sadece ilgili bölümler): 0804844 <hodrimeydan>: 804844: push %ebp 80484: 89 e mov %esp,%ebp 804847: 8 ec 8 sub $0x8,%esp 80484a: c7 44 4 04 90 8 04 movl $0x804890,0x4(%esp) 804847: 08 804847: c7 04 4 0 00 00 00 movl $0x,(%esp) 8048479: e8 f fe ff ff call 804874 < printf_chk@plt> 804847e: c9 leave 804847f: c ret 08048480 <sifre_gir>: 8048480: push %ebp 804848: 89 e mov %esp,%ebp 804848: 8 ec 8 sub $0x8,%esp 804848: 8d 4 f0 lea -0x0(%ebp),%eax 8048489: 89 44 4 04 mov %eax,0x4(%esp) 804848d: c7 04 4 a 8 04 08 movl $0x8048a,(%esp) 8048494: e8 fb fe ff ff call 804894 < isoc99_scanf@plt> 8048499: c9 leave 804849a: c ret 0804849b <main>: 804849b: push %ebp 804849c: 89 e mov %esp,%ebp 804849e: 8 e4 f0 and $0xfffffff0,%esp 80484a: 8 ec 0 sub $0x0,%esp 80484a4: c7 44 4 04 a8 8 04 movl $0x8048a8,0x4(%esp) 80484ab: 08 80484ac: c7 04 4 0 00 00 00 movl $0x,(%esp) 80484b: e8 bc fe ff ff call 804874 < printf_chk@plt> 80484b8: e8 c ff ff ff call 8048480 <sifre_gir> 80484bd: b8 00 00 00 00 mov $0x0,%eax 80484c: c9 leave 80484c: c ret Sayfa

Soru. (4 puan) Bellek sıradüzeni (The memory hierarchy). Bu soruyu yanıtlarken üzerinde çalıştığınız sistemin -bit bir Linux makinesi olduğunu ve baytlık bloklara sahip 4 kümeden oluşan direkt eşlenen (direct-mapped) bir önbellek kullandığını varsayınız. (a) ( puan) u dizisinin 0x0 adresinden başladığını ve önbelleğin başlangıçta soğuk (boş) olduğunu kabul ederek; int i,j; float u[8][8],ux; for (i = ; i < 7; i++) for (j = ; j < 7; j++) ux = 0.*(u[i][j+]-u[i][j-]); programının çalıştırılması sırasında u dizisinin her bir elemanına yapılan ilk erişimin bir rastlama (hit) (R) veya ıskalama (miss) (I) ile sonuçlanıp sonuçlanmadığını aşağıdaki tablo üzerinde işaretleyerek gösteriniz. Ayrıca u dizisine yapılan tüm erişimleri göz önüne alarak ıslama oranını hesaplayınız. j=0 4 7 i=0 4 7 Iskalama oranı = Sayfa

(b) ( puan) u dizisinin yine 0x0 adresinden başladığını ve önbelleğin başlangıçta soğuk olduğunu kabul ederek; int i,j; float u[8][8],uy; for (i = ; i < 7; i++) for (j = ; j < 7; j++) uy = 0.*(u[i+][j]-u[i-][j]); programının çalıştırılması sırasında u dizisinin her bir elemanına yapılan ilk erişimin bir rastlama (hit) (R) veya ıskalama (miss) (I) ile sonuçlanıp sonuçlanmadığını aşağıdaki tablo üzerinde işaretleyerek gösteriniz. Ayrıca u dizisine yapılan tüm erişimleri göz önüne alarak ıslama oranını hesaplayınız. j=0 4 7 i=0 4 7 Iskalama oranı = Sayfa 7

Soru. ( puan) Bağlama (Linking). Aşağıda main.c ve bubblesort.c dosyalarının içerikleri belirtilmiştir: #define SIZE 0 main.c void bubblesort( float *array, int size, int order ); int main(int argc, char** argv) { int i,order,n; float a[size]; sscanf(argv[], "%d", &order); sscanf(argv[], "%d", &N); for(i=0;i<n;i++) scanf("%f", &a[i]); bubblesort(a,n,order); return 0; extern int formatted; bubblesort.c static void printarray(float* array, int SIZE) { int i; for (i = 0; i<size; i++) if (formatted) printf("%.f ", array[i]); else printf("%f ", array[i]); printf("\n"); void bubblesort(float *array, int size, int order) { int pass,j; printarray(array, size); for (pass=0; pass<size-; pass++) for (j=0; j<size-; j++) if (order==0) { if (array[j]>array[j+]) swap(&array[j], &array[j+]); else { if (array[j]<array[j+]) swap(&array[j], &array[j+]); printarray(array, size); Yukarıdaki tanımlara ek olarak helper.c adlı dosyada swap adlı fonksiyonun ve formatted adlı değişkeninin tanımlandığını int formatted=; void swap( float *elementptr, float *elementptr); varsayarak aşağıdaki soruları yanıtlayınız. Sayfa 8

(a) (4 puan) Aşağıdaki sembol tablolarında verilen her ismin karşısına o sembolün yerel veya global ve kuvvetli veya zayıf olup olmadığını belirtiniz. Bu özelliklerin verilen bir isim için geçerli olmadığını düşünüyorsanız ilgili kutuya çarpı atabilirsiniz. Örneğin; verilen sembolün sembol tablosunda yer almaması gerektiğini düşünüyorsanız ilgili satırdaki ilk kutuya çarpı atmanız yeterlidir, veya sembolün global olmadığını düşüyorsanız (ve dolayısıyla zayıf veya güçlü olamıyorsa) ilgili satırdaki ikinci kutuya çarpı atabilirsiniz. NOT: C programlama dilinde harici fonksiyonları beyan etme zorunluluğu yoktur! main.c yerel / global zayıf / güçlü bubblesort main order bubblesort.c yerel / global zayıf / güçlü formatted printarray bubblesort swap (b) ( puan) helper.c dosyasının derlenip helper.a adlı statik bir kütüphanede arşivlendiğini varsayınız. Bu durumda altta sıralanan gcc komutlarının çıktısı aşağıdaki olasılıklardan hangisi olmaktadır? (i) Derleme ve bağlama aşamaları düzgün bir şekilde gerçekleşir. (ii) Tanımsız referanstan (undefined reference) dolayı bağlama aşamasında hata alınır. (iii) Çoklu tanımdan (multiple definitions) dolayı bağlama aşamasında hata alınır. Komut gcc -o sort main.c bubblesort.c helper.a Sonuç gcc -o sort helper.a main.c bubblesort.c gcc -o sort helper.a bubblesort.c main.c gcc -o sort bubblesort.c helper.a main.c gcc -o sort bubblesort.c main.c helper.a Sayfa 9

(c) ( puan) Aşağıda bubblesort.o nesne dosyasının objdump ile elde edilen Assembly çıktısının printarray ile ilgili bölümü verilmiştir. Bu kod üzerinde yer değiştirebilen (relocatable) kısımları işaretleyiniz: 00000000 <printarray>: 0: push %ebp : 89 e mov %esp,%ebp : 8 ec 8 sub $0x8,%esp : c7 4 fc 00 00 00 00 movl $0x0,0xfffffffc(%ebp) d: eb 4 jmp 4 <printarray+0x4> f: a 00 00 00 00 mov 0x0,%eax 4: 8 c0 test %eax,%eax : 74 d je <printarray+0x> 8: 8b 4 fc mov 0xfffffffc(%ebp),%eax b: c e0 0 shl $0x,%eax e: 0 4 08 add 0x8(%ebp),%eax : d9 00 flds (%eax) : dd c 4 04 fstpl 0x4(%esp) 7: c7 04 4 00 00 00 00 movl $0x0,(%esp) e: e8 fc ff ff ff call f <printarray+0xf> : eb b jmp 0 <printarray+0x0> : 8b 4 fc mov 0xfffffffc(%ebp),%eax 8: c e0 0 shl $0x,%eax b: 0 4 08 add 0x8(%ebp),%eax e: d9 00 flds (%eax) 40: dd c 4 04 fstpl 0x4(%esp) 44: c7 04 4 0 00 00 00 movl $0x,(%esp) 4b: e8 fc ff ff ff call 4c <printarray+0x4c> 0: 8 4 fc 0 addl $0x,0xfffffffc(%ebp) 4: 8b 4 fc mov 0xfffffffc(%ebp),%eax 7: b 4 0c cmp 0xc(%ebp),%eax a: 7c b jl f <printarray+0xf> c: c7 04 4 0a 00 00 00 movl $0xa,(%esp) : e8 fc ff ff ff call 4 <printarray+0x4> 8: c9 leave 9: c ret Sayfa 0

Soru 4. (0 puan) Kural dışı durumlarda komut akışı (Exceptional control flow). NOT: Bu soruyu yanıtlarken tüm fonksiyonların normal bir şekilde sonlandığını ve printf fonksiyonunun arabellek kullanmadığını (unbuffered olduğunu) varsayınız. (a) ( puan) Aşağıdaki verilen C programının üretebileceği olası çıktıları nelerdir? int main() { pid_t pid, pid; printf("0\n"); if ((pid = fork()) > 0) { printf("\n"); if ((pid = wait(null)) > 0) { printf("\n"); else { printf("\n"); if ((pid = fork()) == 0) { printf("4\n"); exit(0); else { printf("\n"); printf("\n"); return 0; Aşağıdaki tabloda verilen bir çıktının olası olduğunu düşünüyorsanız ilgili sütunu Evet, olmadığını düşünüyorsanız Hayır olarak işaretleyiniz. 0 4 0 0 4 0 4 0 Sayfa

(b) ( puan) Aşağıda verilen C programının üreteceği olası çıktılar nelerdir? NOT: kill fonksiyonun ilk argümanı 0 ise. argümanda belirtilen sinyal o anki işlemin (current process) dahil olduğu grup içindeki bütün diğer işlemlere gönderilir. void handler(int sig) { printf("%d \n", pid); wait(null); int main() { int pid; setpgid(0,0); signal(sigchld, handler); printf("leyla\n"); if((pid = fork()) > 0) { printf("mecnun\n"); else { kill(0, SIGCHLD); printf("ismail\n"); exit(0); printf("erdal\n"); return 0; Aşağıdaki tabloda verilen bir çıktının olası olduğunu düşünüyorsanız ilgili sütunu Evet, olmadığını düşünüyorsanız Hayır olarak işaretleyiniz. leyla ismail mecnun erdal leyla ismail mecnun erdal leyla erdal mecnun ismail leyla mecnun erdal ismail leyla mecnun erdal ismail Sayfa

Soru. ( puan) Okuma ödevleri. (a) ( puan) Yer değiştirebilen kod (relocatable code) kavramının faydası, çeşitli altbirimlerden oluşan bir programın belleğin herhangi bir yerine yüklenip buradan çalıştırılabilmesidir. Bu özellik sayesinde bir altbirime ait kodun sadece belli bir adresten başlatılabilme gereksinimi ortadan kalkmaktadır. Bu yer değiştirebilen kod kavramı ne kadar eskiye dayanmaktadır? NOT: İlgili bilgisayar sisteminin veya bilimadamının adını belirtmeniz yeterlidir. (b) (8 puan) İlk İnternet solucanı olan Morris solucanı, arabellek taşımından kaynaklı bir güvenlik açığından yararlanarak yüklendiği sistemi kötücül amaçları doğrultusunda kullanmıştır. Bu solucan, aynı zamanda belirli aralıklarla kendisi üzerinde bir fork sistem çağrısı gerçekleştirmekte ve bunun ardından üst komut işlemini (parent process) öldürmektedir. Sizce solucanın bu tarz bir yol izlemesinin altında yatan neden(ler) nedir? Kısaca açıklayınız. Sayfa