Системски софтвер/Јул 1 2025
Пређи на навигацију
Пређи на претрагу
Испит у року јул 1 2025. године одржан је 22. августа. Трајао је сат и по времена и радио се на рачунарима. Рок јул 1 представљао је "фебруарски" рок за школску 2024/2025. годину.
1. задатак
Поставка
Посматрају се два објектна програма levi.o и desni.o добијена помоћу GNU асемблера. Приказати излаз линкера izlaz.o, где је потребно приказати садржај:
- табеле симбола
- табеле секција
- релокационих записа строго поштујући школски формат и обавезно у складу са задатом нумерацијом симбола.
Напомене:
- Линкер је покренут коришћењем следеће команде:где линкерска скрипта
ld -o izlaz.o -T script.ld levi.o desni.o
script.ldима следећи садржај:SECTIONS { .text : { *(.text) } .data : { *(.data) } .bss : { *(.bss) } } - Све нумеричке вредности уносити у хексадецималном формату на ширини од 4B без префикса 0x у другом комплементу двојке.
- Нетачан одговор на ставке приказане падајућим менијем са понуђеним одговорима се пенализује са -33% поена од те ставке. Да се одређена ставка са понуђеним одговорима не би бодовала, потребно је одабрати одговор ???.
levi.o
| Num | Address | Size | Type | Flags | Name |
|---|---|---|---|---|---|
| 0: | 00000000 | 004F | PROGBITS | AX | .text |
| 1: | 00000000 | 0004 | PROGBITS | WA | .data |
| 2: | 00000000 | 0022 | NOBITS | WA | .bss |
| Num | Value | Size | Type | Bind | Ndx | Name |
|---|---|---|---|---|---|---|
| 0: | 00000000 | 0 | NOTYP | LOC | UND | |
| 1: | 00000000 | 0 | SCTN | LOC | 1 | .text |
| 2: | 00000000 | 0 | SCTN | LOC | 2 | .data |
| 3: | 00000000 | 0 | SCTN | LOC | 3 | .bss |
| 4: | 00000013 | c | FUNC | GLOB | 1 | a |
| 5: | 00000015 | 8 | NOTYP | GLOB | 2 | b |
| 6: | 00000000 | 0 | NOTYP | GLOB | UND | c |
| Offset | Type | Symbol | Addend |
|---|---|---|---|
| 0000000d | R_X86_64_32S | 4 (a) | 8 |
| 00000000 | R_X86_64_PC32 | 6 (c) | -4 |
desni.o
| Num | Address | Size | Type | Flags | Name |
|---|---|---|---|---|---|
| 1: | 00000000 | 0012 | PROGBITS | AX | .text |
| 2: | 00000000 | 0008 | PROGBITS | WA | .data |
| 3: | 00000000 | 0010 | NOBITS | WA | .bss |
| Num | Value | Size | Type | Bind | Ndx | Name |
|---|---|---|---|---|---|---|
| 0: | 00000000 | 0 | NOTYP | LOC | UND | |
| 1: | 00000000 | 0 | SCTN | LOC | 1 | .text |
| 2: | 00000000 | 0 | SCTN | LOC | 2 | .data |
| 3: | 00000000 | 0 | SCTN | LOC | 3 | .bss |
| 4: | 00000004 | 8 | NOTYP | LOC | 2 | b |
| 5: | 00000000 | 0 | OBJECT | GLOB | 5 | c |
| 6: | 00000000 | 0 | NOTYP | GLOB | UND | a |
| Offset | Type | Symbol | Addend |
|---|---|---|---|
| 00000003 | R_X86_64_PC32 | 6 (a) | -4 |
| Offset | Type | Symbol | Addend |
|---|---|---|---|
| 00000002 | R_X86_64_32 | 3 (.bss) | 8 |
Решење
| Num | Address | Size | Type | Flags | Name |
|---|---|---|---|---|---|
| 1: | 00000000 | 00000061 | PROGBITS | AX | .text |
| 3: | 00000061 | 0000000C | PROGBITS | WA | .data |
| 5: | 0000006D | 00000032 | NOBITS | WA | .bss |
| Num | Value | Size | Type | Bind | Ndx | Name |
|---|---|---|---|---|---|---|
| 0: | 00000000 | 0 | NOTYP | LOC | UND | |
| 1: | 00000000 | 0 | SCTN | LOC | 1 | .text |
| 2: | 00000061 | 0 | SCTN | LOC | 3 | .data |
| 3: | 0000006D | 0 | SCTN | LOC | 5 | .bss |
| 4: | 00000069 | 0 | NOTYP | LOC | 3 | b |
| 5: | 00000082 | 0 | NOTYP | GLOB | 5 | b |
| 6: | 00000097 | 0 | NOTYP | GLOB | 5 | c |
| 7: | 00000013 | 0 | FUNC | GLOB | 1 | a |
| Offset | Type | Symbol | Addend |
|---|---|---|---|
| 00000004 | R_X86_64_32S | a | 00000000 |
| 0000000B | R_X86_64_PC32 | c | FFFFFFFC |
| 00000052 | R_X86_64_PC32 | a | FFFFFFFC |
| Offset | Type | Symbol | Addend |
|---|---|---|---|
| 00000006 | R_X86_64_32 | .bss | 00000022 |
2. задатак
Поставка
Посматра се JIT емулатор и емулирање следећег програма.
- Означити све блокове који ће у току рада емулатора бити преведени. За сваки преведени блок навести јединствену идентификацију у облику
B<n>(<x>-<y>)(<n>је редни број блока у погледу тренутка његовог превођења при чему нумерација почиње од броја један, <x> је редни број прве а <y> редни број последње линије изворног кода блока). - Навести секвенцу извршавања. У секвенци извршавања могу се нађи само
GP(сваки пут када се емулатор врати у главну петљу),BH(сваки пут када се позове функција која помаже у разрешавању скокова) иB<n>(сваки пут када се изврши дати блок у складу са ознакама из претходне тачке).
BEG ; 0x00
LDA A ; 0x00
L3 BPO L1 ; 0x02
BZE L2 ; 0x04
LDA B ; 0x06
DEC ; 0x08
STA B ; 0x09
BNZ L2 ; 0x0B
HLT ; 0x0D
L2 LDA A ; 0x0E
INC ; 0x10
STA A ; 0x11
L1 SBI 2 ; 0x13
BRN L3 ; 0x15
A DC 1 ; 0x17
B DC 2 ; 0x18
END
Решење
- Блокови по редоследу превођења:
- B1(0x00 - 0x03)
- B2(0x13 - 0x16)
- B3(0x02 - 0x03)
- B4(0x04 - 0x05)
- B5(0x06 - 0x0C)
- B6(0x0E - 0x12)
- B7(0x0D - 0x0D)
- Редослед извршавања:
- GP
- B1
- BH
- GP
- B2
- BH
- GP
- B3
- BH
- GP
- B4
- BH
- GP
- B5
- BH
- GP
- B6
- B2
- BH
- B3
- BH
- B4
- BH
- B6
- B2
- B3
- B2
- B3
- B4
- BH
- B5
- BH
- GP
- B7
- BH
- GP
3. задатак
Поставка
Одредити индекс класификације и то да ли је израз релокативан за сваки израз дат у табели, уколико се смешта на место placeholder.
.extern e1, e2
.equ sym, 100
.section .X
x1: .skip 4
x2: .skip 5
.section .Y
y1: .skip 6
y2: .skip 7
y3: .skip 8
.section .here
# placeholder
.end
Решење
.X
|
.Y
|
.here
|
.unique(e1)
|
.unique(e2)
|
Израз релокативан? | |
|---|---|---|---|---|---|---|
.long x1+y1-y2+sym
|
1 | 0 | 0 | 0 | 0 | Да |
.long x1+x2
|
2 | 0 | 0 | 0 | 0 | Не |
.long sym+3
|
0 | 0 | 0 | 0 | 0 | Не |
.long e1+e2
|
0 | 0 | 0 | 1 | 1 | Не |
.long .+e1-e2
|
0 | 0 | 1 | 1 | -1 | Не |
.long sym+3 је апсолутан, самим тим није релокативан.
4. задатак
Поставка
Навести шта је резултат експанзије следећег кода од стране C претпроцесора.
#define A 1, 1
#define B(b), #b
#define C(c1, c2) c1 ## c2
#define D(d) d
#define E(e) B(A) C(e) D(#e)
E(A)
Решење
"A" 11 "A"