Ispit u roku septembar 1 2025. godine održan je 21. septembra. Trajao je sat i po vremena i radio se na računarima.
1. zadatak
Postavka
Posmatra se proces asembliranja datog ivzornog asemblerskog koda za amd64 arhitekturu. Rezultat asembliranja je predmetni program po ELF formatu. Prikazati sadržaj (1) tabele simbola i (2) relokacionih zapisa strogo poštujući školski format i obavezno u skladu sa zadatom numeracijom simbola.
.intel_syntax noprefix
.extern a
.global f
.type f, @object
.equ f, b-c
.text
call a[+ip] # 0x00
e: mov rax, c # 0x06
jz e # 0x0e
jz c # 0x10
d: mov rax, [b - f] # 0x16
.long e # 0x1e
.data
.skip 0x6 # 0x00
c: .long b + 0xe # 0x06
b:
.end
Napomena: Heksadecimalni brojevi navedeni u komentaru izvornog asemblerskog koda predstavljaju pomeraj do početka instrukcije u tom redu gledano od početka sekcije kojoj instrukcija pripada. Takođe, usvojiti pretpostavku da je veličina operacionog koda:
- 2B za instrukciju
call za PC relativno adresiranje,
- 4B za instrukciju
mov za apsolutno adresiranje i
- 2B ili 1B za instrukcije skoka za PC relativno adresiranje, u zavisnosti od širine operanda.
Rešenje
.symtab
| Num |
Value |
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: |
0 |
0 |
SCTN |
LOC |
3 |
.bss
|
| 4: |
A |
0 |
NOTYP |
LOC |
2 |
b
|
| 5: |
6 |
0 |
NOTYP |
LOC |
2 |
c
|
| 6: |
6 |
0 |
NOTYP |
LOC |
1 |
e
|
| 7: |
16 |
0 |
NOTYP |
LOC |
1 |
d
|
| 8: |
4 |
0 |
OBJ |
GLOB |
ABS |
f
|
| 9: |
0 |
0 |
NOTYP |
GLOB |
UND |
a
|
.rela.text
| Offset |
Type |
Symbol |
Addend
|
| 2 |
R_X86_64_PC32 |
9 |
-4
|
| A |
R_X86_64_32S |
2 |
6
|
| 12 |
R_X86_64_PC32 |
2 |
2
|
| 1A |
R_X86_64_32S |
2 |
6
|
| 1E |
R_X86_64_32 |
1 |
6
|
.rela.data
| Offset |
Type |
Symbol |
Addend
|
| 6 |
R_X86_64_32 |
2 |
18
|