Sistemski softver/K2 2022

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

Drugi kolokvijum 2022. održan je 14. maja. Kolokvijum je trajao 90 minuta i radio se u vežbankama. Oba zadatka su vredela 10 poena.

1. zadatak

Postavka

Dati kod na asembleru za amd64 prevodi se dvoprolaznim asemblerom. Rezultat prevođenja je predmeti program po ELF formatu. Prikazati sadržaj:

  1. tabele simbola
  2. relokacionih zapisa kao i
  3. sadržaj sekcija.

Koristiti školski format naveden u nastavku:

TABELA SIMBOLA
Num Value Size Type Bind Ndx Name
RELOKACIONI ZAPISI
Offset Type Symbol Addend

Pri rešavanju usvojiti sledeće (heksadecimalne vrednosti unutar zagrada nakon podatka o veličini instrukcije jesu prvi bajtovi instrukcije koji predstavljaju njen operacioni kod):

  • Instrukcija call koristi PC relativno adresiranje. Veličina instrukcije je šest bajtova (0xff 0x15).
  • Instrukcija mov koristi apsolutno adresiranje. Veličina instrukcije je osam bajtova (0x48 0x8b 0x04 0x25).
  • Instrukcija jz koristi PC relativno adresiranje. Veličina instrukcije je dva bajta (0x74) ili šest bajtova (0x0f 0x84) zavisno od veličine pomeraja.
.intel_syntax noprefix
.extern a
.global f
.equ f, b-c

.text
    call a[rip]
e:  mov rax, c
    jz e
    jz c
d:  mov rax, b - f
    .long e

.data
    .skip 6
c:  .long b + 0xe
b:
.end

Rešenje

.symtab
Num Value [hex] Size Type Bind Ndx Name
0 0 0 NOTYP LOC UND
1 0 0 SCTN LOC 1 .text
2 0 0 SCTN LOC 2 .data
3 4 0 NOTYP GLOB *ABS* f
4 0 0 NOTYP GLOB UND a
5 A 0 NOTYP LOC 2 b
6 6 0 NOTYP LOC 2 c
7 16 0 NOTYP LOC 1 d
8 6 0 NOTYP LOC 1 e
.rela.text
Offset Type Symbol Addend
2 PC32 a -4
A 32 .data 6
12 PC32 .data 2
1A 32 .data 6
1E 32 .text 6
.rela.data
Offset Type Symbol Addend
6 32 .data 18
.text
Offset Content Instruction
0000 FF 15 00 00 00 00 call a[rip]
0006 48 8B 04 25 00 00 00 00 mov rax, c
000D 74 F6 jz e
0010 0F 84 00 00 00 00 jz c
0016 48 8B 04 25 00 00 00 00 mov rax, b - f
001D 00 00 00 00 .long e
.data
Offset Content Instruction
0000 00 00 00 00 00 00 .skip 6
0006 00 00 00 00 .long b + 0xe

2. 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 0x64
        SCT DAT
LAB2    DC LAB1
        DC 7 + LAB2
        SCT TXT
LAB3    LDA LAB2 - 1
        ADX * - LAB3
        OTI
        HLT
        END

Rešenje

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