Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Adressekcji.dynamicmożnauzyskaćnaconajmniejdwasposoby:
•przezodczytaniepolap_offsetzsegmentuPT_DYNAMIC(jesttometodawykorzystywanaprzezprogramładujący),
•przezodczytaniepolash_offsetzsekcji.dynamic.
Napowyższymlistinguprzedstawionoprzykładowątabelęzinformacjamidotyczącymiłączeniadynamicznego,odczytanązprogramu
/bin/ls,któraznajdujesiępodadresem0x1DE18.
Obapolapowinnyzawieraćtensamadreswpliku,którywskazujenalokalizacjętabelizinformacjamiołączeniudynamicznym.
Strukturatabeliniejestskomplikowana–jesttozwykłatablicazawierającaelementytypu
klucz-wartość
,gdzie
klucz
pełnirolę
identyfikatorainformacji,a
wartość
zawieradane,którenależyinterpretowaćzgodniezużytym
kluczem
.Odstronybinarnej,
naplatformach32-bitowych,
klucz
i
wartość
sązapisanezapomocąpól4-bajtowych(typuint32_t),natomiastnaplatformie64-bitowej
polasą8-bajtowe(typuint64_t).
Pełnalistapoprawnychwartości,możliwychdoużyciawpolu
klucz,
znajdujesięwwiększościdystrybucjiwpliku/usr/include/elf.h
(strukturaElf32_DynlubElf64_Dyn),jednaknajważniejszeznichto:
•DT_NULL(0)–oznaczakoniectablicy.Dziękitemuwpisowimożnaokreślićostatniprawidłowyelementwtablicy,awięcjednocześnie
możliwejestokreśleniejejrozmiaru.
•DT_STRTAB(5)–tablicałańcuchówznakowych(nazywanatablicą
strtab
)użytychwstrukturzeELF
.Zawierałańcuchyopisujące
nazwyużytychbibliotek,importowanychfunkcji,eksportowanychfunkcjiitd.Każdyłańcuchjestkodowanyprzyużyciukodowania
ASCIIZ,czylikoniecłańcuchajestoznaczonyprzezbajt0.
•DT_NEEDED(1)–informuje,żebibliotekaidentyfikowanaprzez
wartość
jestzależnościątegoprogramu(lubtejbiblioteki).Biblioteka
zależnazostaniezaładowanaprzedinicjalizacjąiuruchomieniemkoduprogramu.
Wartość
opisujenumerwpisuwopisanejwyżej
tablicy
strtab
(np.wartość„5”oznaczapiątyłańcuchznakowywtablicy
strtab
).
Rysunek2.3.Sekcja.dynamicwsegmenciePT_DYNAMIC
•DT_INIT(12)iDT_FINI(13)–jesttowskaźniknakodprogramu,uruchamianypodczasprocesuinicjalizacji(lubzakończenia)programu
lubbiblioteki.Inicjalizacjanastępujeprzedoddaniemkontroliprogramufunkcjimain(),więcpodczasanalizyzłośliwego
oprogramowanianależyupewnićsię,żenieistniejąwpisyoznaczonetymkluczem,lubodpowiedniojeobsłużyć.
Wartość
jestadresem
wpamięcikodu,którypowinienzostaćwykonany.