Sistemski softver/Avgust 2022

Izvor: SI Wiki
< Системски софтвер
Datum izmene: 24. avgust 2022. u 15:48; autor: TopOfKeks (razgovor | doprinosi) (Нова страница: {{tocright}} '''Испит у августовском року 2022. године''' одржан је 24. августа. Сваки задатак вреди уку…)
(razl) ← Starija izmena | Trenutna verzija (razl) | Novija izmena → (razl)
Pređi na navigaciju Pređi na pretragu

Ispit u avgustovskom roku 2022. godine održan je 24. avgusta. Svaki zadatak vredi ukupno 10 poena. Ispit traje 2 sata.

1. zadatak

Postavka

Odrediti vrednost pri obradi od strane asemblera za hipotetičku mašinu (ukoliko vrednost nije poznata napisati znak pitanja) i indeks klasifikacije za svaki izraz u okviru izvornog asemblerskog koda datog u nastavku.

        BEG
        USE LAB1
        ORG 0x60
        SCT DAT
LAB2    DC LAB1
        DC 7 + LAB2
        SCT TXT
LAB3    LDA LAB2 - 1
        ADX * - LAB3
        END

Rešenje

Naredba Indeks klasifikacije Vrednost
DC LAB1 1.unique() ?
DC 7 + LAB2 0 + 1.DAT = 1.DAT 0x67
LDA LAB2 - 1 1.DAT - 0 = 1.DAT 0x5f
ADX * - LAB3 1.TXT - 1.TXT = 0 0x2

2. zadatak

Postavka

Navesti šta je rezultat ekspanzije sledećeg koda od strane C pretprocesora i objasniti kako je dobijen.

#define M1(x1) M2(x1)
#define M2(x1) M3(x1,A)
#define M3(x1,x2) x2 M3(x1,x2) M1(x1)
M3(M1(C), B)

Rešenje

Pojavljivanje nekog makroa u svojoj definiciji se ne smatra makropozivom. Videti 3.10.5 Self-Referential Macros iz dokumentacije C pretprocesora.

B M3(A M3(C, A) M1(C), B) M3(A M3(C, A), A)

3. zadatak

Ovaj zadatak nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.

Postavka

Za neki emulator potrebno je napisati funkciju void write(unsigned addr, unsigned data) za upis u memoriju. Adresni prostor je veličine 4 GB, a adresabilna jedinica je bajt. Smatrati da je pristup reči uvek poravnat na adresu deljivu sa 4. Na raspolaganju su funkcije unsigned rphy(unsigned addr), koja dohvata reč sa date fizičke adrese i void wphy(unsigned addr, unsigned data), koja upisuje zadatu reč na zadatu fizičku adresu. Emulirana mašina poseduje virtuelnu memoriju organizovanu stranično. Veličina stranice je 16 KB. Registar PMTP (koji se emulira istoimenom globalnom promenljivom) sadrži adresu tabele za preslikavanje stranica. Svaki ulaz u tabeli je 32 bita, pri čemu su najviša dva bita V i D bitovi. Ukoliko je V bit jednak 0, u najnižih 30 bitova je zapisana adresa na disku, dok je u slučaju da je bit V jednak 1, u najnižim bitovima ulaza zapisan redni broj bloka u koji je smeštena stranica. U slučaju da stranica nije u memoriji, učitava se u memoriju pozivom funkcije void load(unsigned hddaddr), koja u pozadini generiše page fault i blokira pozivajuću nit dok stranica ne bude učitana sa diska. Jedini argument funkcije predstavlja adresu kojoj se pristupa.

Rešenje

4. zadatak

Ovaj zadatak nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.

Postavka

Posmatra se proces pokrenut nad programom run dobijenim povezivanjem sa deljenom bibliotekom libfoo.so. Deljena biblioteka libfoo.so sadrži funkcije bar i baz čije su adrese unutar libfoo.so 0x1218 i 0x12C4 respektivno, a sama deljena biblioteka libfoo.so mapirana je počev od adrese 0x4FFF0000 unutar adresnog prostora posmatranog procesa.

Program run, koji predstavnja PIC shared object ELF datoteku, mapiran je počev od adrese 0x7EEE0000 unutar adresnog prostora posmatranog procesa. Program run od deljenih biblioteka koristi isključivo libfoo.so i poziva njene dve funkcije bar i baz koristeći lenjo povezivanje. Ukoliko je poznat deo .plt sekcije programa run, naveden u nastavku, potrebno je uraditi sledeće.

  1. [2] Odrediti na kojoj adresi se nalazi .got.plt sekcija programa run.
  2. [4] Popuniti .plt sekciju (zameniti svako pojavljivanje znakova pitanja odgovarajućom vrednošću) ukoliko je poznato da se ulaz za funkciju bar unutar .plt sekcije nalazi ispred ulaza za funkciju baz unutar .plt sekcije.
  3. [2] Navesti vrednosti koje se nalaze u ulazima .got.plt sekcije, koji odgovaraju simbolima bar i baz, u trenutku pre nego što je posmatrani proces izvršio prvi poziv bilo koje funkcije iz deljene biblioteke libfoo.so.
  4. [2] Navesti vrednosti koje se nalaze u ulazima .got.plt sekcije, koji odgovaraju simbolima bar i baz, u trenutku nakon što je posmatrani proces izvršio poziv funkcije bar, a pre poziva funkcije baz.
Disassembly of section .plt:
0000000000001060 <.plt>:
  1060: ff 35 a2 42 00 00                push QWORD PTR [rip + 0x42a2]
  1066: ff 25 a4 42 00 00                jmp QWORD PTR [rip + 0x42a4]
  106c: 0f 1f 40 00                      nop DWORD PTR [rax + 0x00]
  1070: ff 25 ?? ?? ?? ??                jmp QWORD PTR [rip + ??]
  1076: 68 00 00 00 00                   push 0x00
  107b: e9 ?? ?? ?? ??                   jmp ??
  1080: ff 25 ?? ?? ?? ??                jmp QWORD PTR [rip + ??]
  1086: 68 01 00 00 00                   push 0x01
  108b: e9 ?? ?? ?? ??                   jmp ??

Rešenje