1. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Biblioteci. Gestiunea bibliotecilor
R˘zvan Deaconescu
a
razvan@rosedu.org
ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
14 iulie 2011
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
2. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Outline
1 Biblioteci
2 Programatic
3 Gestiunea bibliotecilor
4 ˆ
Intreb˘ri
a
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
3. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Fisiere obiect
,
fisiere binare
,
cod compilat si asamblat
,
format ELF, COFF, PE
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
4. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Biblioteci
colectie de fisiere obiect
, ,
functionalit˘tile oferite de fisierele obiect sunt disponibile ˆ
, a, , ın
bibliotec˘
a
link-area unei biblioteci pentru obtinerea unui executabil
,
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
5. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
De ce biblioteci?
modularizare, reutilizare
reinventing the wheel
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
6. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Biblioteci statice
colectie “dumb” de fisiere obiect
, ,
linkarea unei biblioteci statice ˆ
ınseamn˘ ad˘ugarea de cod
a a
executabil
se adaug˘ ˆ
a ıntreg codul modulului obiect din care provine
functia
,
ar rc libmylib.a a.o b.o c.o
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
7. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Biblioteci dinamice
fisier cu format specializat ˆ care sunt colectate fisierele
, ın ,
obiect
detine informatii suplimentare despre obiecte, simboluri,
, ,
functii
,
linkarea ˆ
ınseamn˘ doar marcarea unor referinte c˘tre biblioc˘
a , a a
ˆ arcarea codului din cadrul bibliotecii va fi realizat˘ ulterior
ınc˘ a
.so pe Unix, .dll pe Windows
gcc -shared -o libmylib.so a.o b.o c.o
fisierele obiect compilate cu -fPIC
,
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
8. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Biblioteci statice vs. dinamice
statice
cod portabil (independent de bibliotecile sistemului)
nu exist˘ overhead la load-time sau run-time
a
dinamice
dimensiune mic˘ a executabilului
a
eficient˘ ˆ folosirea memoriei – bibliotecile sunt “partajate” de
, a ın
mai multe procese
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
9. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Biblioteci vs. headere
bibliotecile sunt colectii de fisiere obiect
, ,
headerele sunt fisiere cu extensia .h ce contin
, ,
declaratii de functii
, ,
macrodefinitii,
definitii de structuri si tipuri de date
, ,
un header este inclus de un fisier C sau alt fisier header
, ,
o bibliotec˘ este linkat˘ la un executabil
a a
un header este scris de programator
o bibliotec˘ este obtinut˘ prin “comasarea” fisierelor obiect
a , a ,
header – preprocesare
bibliotec˘ – linking
a
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
10. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Analiza unei biblioteci
ldd – listarea dependentelor pentru bibliotei dinamice
,
nm – listarea simbolurilor
readelf – citeste fisierele ELF
, ,
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
11. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Outline
1 Biblioteci
2 Programatic
3 Gestiunea bibliotecilor
4 ˆ
Intreb˘ri
a
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
12. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Linker-ul
rezolvarea simbolurilor si unirea modulelor obiect
,
un simbol: o variabil˘, un nume de functie
a ,
la compilare, simbolurile folosite ˆ modul, dar nedefinite, sunt
ın
marcate special (undefined)
rezolvare = descoperirea modulului ˆ care este definit
ın
simbolurile
linker-ul este folosit pentru a obtine executabile si biblioteci
, ,
dinamice
LD FLAGS – flag-uri de linker
-L. – la linkare sunt c˘utate bibliotecile si ˆ directorul curent
a , ın
LD LIBS – biblioteci linkate
-ltorrent
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
13. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Loader-ul
ˆ
ıncarc˘ programul ˆ executie si ˆ
a ın , , ıncepe rularea procesului
load time = la executie
,
loaderul are cunostint˘ de formatul executabilului
, ,a
traduce zonele din fisierul executabil ˆ zone de memorie
, ın
apelat prin intermediul execve(2)
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
14. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Static linking
folosit la legarea modulelor obiect si a bibliotecilor statice
,
tot codul necesar este “colectat” ˆ executabil
ın
executabilul poate fi portat pe un sistem ce nu detine
,
bibliotecile folosite
se poate folosi optiunea -static la gcc
,
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
15. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Dynamic linking
folosit la legarea bibliotecilor dinamice
se adaug˘ putin cod ˆ executabil
a , ın
aducerea codului necesar ˆ memorie se realizeaz˘ mai tˆrziu
ın a a
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
16. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Load time dynamic linking
codul necesar din cadrul bibliotecii este adus ˆ memorie la
ın
load time (lansarea ˆ executie)
ın ,
se ocup˘ loaderul
a
loaderul trebuie s˘ stie unde s˘ caute
a , a
optiunea -L. este folosit˘ la link time nu la load time
, a
se lanseaz˘ procesul si se adaug˘ codul bibliotecii
a , a
dac˘ biblioteca exist˘ ˆ memorie (ˆ arcat˘ de alt proces),
a a ın ınc˘ a
atunci este referit˘ si partajat˘
a , a
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
17. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Run time dynamic linking
codul este adus ˆ memorie la run time (ˆ momentul ˆ care
ın ın ın
procesul se execut˘)
a
similaritate cu malloc
dezvoltatorul precizeaz˘ numele bibliotecii; c˘utarea se face
a a
similar ca la load time dynamic linking
dlopen & friends
LoadLibrary & friends
De ce?
plugins
hooking (injection)
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
18. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
LD PRELOAD
nume de fisiere de tip bibliotec˘ ce sunt ˆ arcate ˆ
, a ınc˘ ınaintea
altora
nu c˘i c˘tre directoare cu biblioteci (cum se ˆ ampl˘ la
a a ıntˆ a
LD LIBRARY PATH
scenariu tipic – hooking
se creeaz˘ un modul ce implementeaz˘ malloc
a a
se creeaz˘ o bibliotec˘ ce contine modulul
a a ,
se foloseste LD PRELOAD
,
la un apel malloc se apeleaz˘ biblioteca proprie
a
folosind dlopen & friends se apeleaz˘ malloc din biblioteca
a
standard C
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
19. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
LD DEBUG
depanarea interactiunii cu biblioteca
,
export LD DEBUG=help
export LD DEBUG=files
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
20. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Outline
1 Biblioteci
2 Programatic
3 Gestiunea bibliotecilor
4 ˆ
Intreb˘ri
a
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
21. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Biblioteci statice
se p˘streaz˘ ˆ directoare standard (/usr/lib, /lib)
a a ın
altfel, se precizeaz˘ la link time calea c˘tre bibliotec˘
a a a
(LD FLAGS, -L.)
nu este nevoie de un management specializat
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
22. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Biblioteci dinamice
rezolvarea referintelor se face la link time, f˘r˘ a ˆ arca
, a a ınc˘
buc˘ti de cod ˆ fisierul executabil
a, ın ,
calea c˘tre biblioteci trebuie rezolvat˘ la load time (sau run
a a
time)
trebuie configurat loader-ul, care nu este apelat explicit de
utilizator (este apelat prin intermediul execve)
man ld.so
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
23. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
What is this?
ld.so
ld-linux.so
/etc/ld.so.conf
/etc/ld.so.conf.d/
/etc/ld.so.cache
/etc/ld.so.preload
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
24. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
LD LIBRARY PATH
precizeaz˘ c˘i suplimentare unde s˘ fie c˘utate bibliotecile
a a a a
dinamice
similar cu PATH – separatie prin caracterul “dou˘
, a
puncte”/“colon” (:)
LD LIBRARY PATH=. ./exec
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
25. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
ldconfig
controleaz˘ cache-ul de de biblioteci dinamice
a
cache-ul este stocat ˆ fisierul /etc/ld.so.cache
ın ,
loader-ul caut˘ bibliotecile urmˆnd un set de pasi dati (man
a a , ,
ld.so)
ˆ
ınainte de a c˘uta ˆ directoarele implicite (/lib, /usr/lib),
a ın
va c˘uta ˆ cache – vitez˘ sporit˘
a ın a a
ldconfig este apelat ˆ general la instalarea de aplicatii de
ın ,
sistemul de gestiune a pachetelor (apt, yum)
ldconfig -p
ldconfig -n .
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
26. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Outline
1 Biblioteci
2 Programatic
3 Gestiunea bibliotecilor
4 ˆ
Intreb˘ri
a
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci
27. Biblioteci Programatic Gestiunea bibliotecilor ˆ
Intreb˘ri
a
Resurse utile
http://www.dwheeler.com/program-library/
MSDNAA – Dynamic Link Libraries –
http://msdn.microsoft.com/en-us/library/
ms682589(v=VS.85).aspx
R˘zvan Deaconescu
a ˆ alnirile lunare RLUG – Iulie 2011
Intˆ
Biblioteci