konstrukcija asemblera Flashcards
Sta sadrze objektni fajlovi?
1) zaglavlje (u kojem se nalaze opste informacije)
2) masinski kod
3) relokacioni zapisi (kako bi linker mogao lepo da poveze ovaj fajl sa ostalima)
4) lista definisanih simbola
5) informacije za debager
Koje vrste obj fajl postoje?
1) izvrsni fajl
2) relokativni fajl
3) deljeni fajl
Sta je izvrsni fajl?
To je fajl koji ima binarni kod u sebi i potrebne podatke kako bismo ga ucitali u mem i pokrenuli
Sta je relokativni fajl?
Fajl koji ima binarni kod i relokativne zapise koji pomazu linkeru u povezivanju njega sa ostaim fajlovima
Sta je deljeni fajl?
Objektni fajl sa binarnim kodom koji moze da se ucita u mem i da se dinamicki poveze
Sta ima sve ELF format?
1) zaglavlje (opste informacije)
2) tabela zaglavlja programa (bitna samo kada pokrenemo program)
3) sekcije i njihov kod
4) tabele sekcija (lokacije i velicine sekcija)
Sekcije koje moze da ima jedan elf fajl?
1) .text
2) .data ->globalne promenljive
3) .rodata ->globalne prom koje se samo citaju
4) .bss ->neinicijalizovani globalni podaci [postoje tek kada se pokrene program]
5) .line
6) .debug
7) .symtab ->tabela simbola
8) .strtab ->tabela stringova
9) .rel.text
10) .rel.data
Kojeg tipa mogu biti podaci u tabeli simbola?
ABS = ne treba mu relokacija
UNDEF = nisu definisani
COMMEN = neinicijalizovani, nisu jos alocirani
Koje su glavne funckije asemblera?
1) prevodi sa asemblerskog koda na masinski binarni kod
2) obrada referenci:
-skokovi
-poziv i ovratak iz funkcije
-pristup glob prom preko simbolickog imena
Sta je referisanje unapred?
To je kada treba da generisemo kod i dodjemo do instr koja ima definisanu labelu tek posle, pa ta labela ne postoji jos uvek u tabeli simbola
Kako se resava referisanje unapred?
Tako sto cemo da napravimo dvoprolazni asmebler
Kostrukcija dvoprolaznog asemblera?
U 1 prolazu:
samo ide i definise simbole u tabelu simbola
U 2 prolazu:
pravi .bss,.data,.rodata,.text i relokacione zapise ako su potrebni
Prvi prolaz dvorpolaznog asemblera?
Znaci ide redom i upisuje sve simbole, sekcijama stavlja da je ofs 0, jer se location counter uvek resetuje na pocetku sekcija;
Ako imamo negde globalana simbol, u ovom prolazu ce pisati da je lokalan, to se menja tek u drugom prolazu
Drugi prolaz dvoulaznog asemblera?
Ako imamo na primer call f-ja,a pritom ta f-ja nije u ovom modulu, onda ubacujemo f-ju u tabelu simbola i pravimo relokacioni zapis koji je tipa R_x86_64_PC32 i ofset gde smo ga nasli
Ako imamo tipa podatak i ne znamo gde je njegova sekcija opet radimo isto samo sto je tip ovde R_x86_64_32
Koji tipovi relokacionih zapisa postoje?
1) R_X86_64_PC32 - koji nam govori da je ovde relativna vrednost
2)R_X86_64_32 - koji nam govori da je ovo apsolutna vrednost