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.
Strukturatabeliniejestskomplikowanajesttozwykłatablicazawierającaelementytypu
klucz-wartość
,gdzie
klucz
pełnirolę
identyfikatorainformacji,a
wartość
zawieradane,którenależyinterpretowaćzgodniezużytym
kluczem
.Odstronybinarnej,
naplatformach32-bitowych,
klucz
i
wartość
zapisanezapomocąpól4-bajtowych(typuint32_t),natomiastnaplatformie64-bitowej
pola8-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.