28
Biblioteci Programatic Gestiunea bibliotecilor ˆ Intreb˘ ari Biblioteci. Gestiunea bibliotecilor azvan Deaconescu [email protected] ˆ Intˆ alnirile lunare RLUG – Iulie 2011 14 iulie 2011 azvan Deaconescu ˆ Intˆ alnirile lunare RLUG – Iulie 2011 Biblioteci

Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Embed Size (px)

Citation preview

Page 1: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Biblioteci. Gestiunea bibliotecilor

Razvan [email protected]

Intalnirile lunare RLUG – Iulie 2011

14 iulie 2011

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 2: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Outline

1 Biblioteci

2 Programatic

3 Gestiunea bibliotecilor

4 Intrebari

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 3: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Fis, iere obiect

fis, iere binare

cod compilat s, i asamblat

format ELF, COFF, PE

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 4: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Biblioteci

colect, ie de fis, iere obiect

funct, ionalitat, ile oferite de fis, ierele obiect sunt disponibile ınbiblioteca

link-area unei biblioteci pentru obt, inerea unui executabil

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 5: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

De ce biblioteci?

modularizare, reutilizare

reinventing the wheel

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 6: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Biblioteci statice

colect, ie “dumb” de fis, iere obiect

linkarea unei biblioteci statice ınseamna adaugarea de codexecutabil

se adauga ıntreg codul modulului obiect din care provinefunct, ia

ar rc libmylib.a a.o b.o c.o

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 7: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Biblioteci dinamice

fis, ier cu format specializat ın care sunt colectate fis, iereleobiect

det, ine informat, ii suplimentare despre obiecte, simboluri,funct, ii

linkarea ınseamna doar marcarea unor referint, e catre biblioca

ıncarcarea codului din cadrul bibliotecii va fi realizata ulterior

.so pe Unix, .dll pe Windows

gcc -shared -o libmylib.so a.o b.o c.o

fis, ierele obiect compilate cu -fPIC

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 8: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Biblioteci statice vs. dinamice

statice

cod portabil (independent de bibliotecile sistemului)nu exista overhead la load-time sau run-time

dinamice

dimensiune mica a executabiluluieficient, a ın folosirea memoriei – bibliotecile sunt “partajate” demai multe procese

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 9: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Biblioteci vs. headere

bibliotecile sunt colect, ii de fis, iere obiect

headerele sunt fis, iere cu extensia .h ce cont, in

declarat, ii de funct, iimacrodefinit, iidefinit, ii de structuri s, i tipuri de date

un header este inclus de un fis, ier C sau alt fis, ier header

o biblioteca este linkata la un executabil

un header este scris de programator

o biblioteca este obt, inuta prin “comasarea” fis, ierelor obiect

header – preprocesare

biblioteca – linking

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 10: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Analiza unei biblioteci

ldd – listarea dependent, elor pentru bibliotei dinamice

nm – listarea simbolurilor

readelf – cites, te fis, ierele ELF

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 11: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Outline

1 Biblioteci

2 Programatic

3 Gestiunea bibliotecilor

4 Intrebari

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 12: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Linker-ul

rezolvarea simbolurilor s, i unirea modulelor obiect

un simbol: o variabila, un nume de funct, ie

la compilare, simbolurile folosite ın modul, dar nedefinite, suntmarcate special (undefined)

rezolvare = descoperirea modulului ın care este definitsimbolurile

linker-ul este folosit pentru a obt, ine executabile s, i bibliotecidinamice

LD FLAGS – flag-uri de linker

-L. – la linkare sunt cautate bibliotecile s, i ın directorul curent

LD LIBS – biblioteci linkate

-ltorrent

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 13: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Loader-ul

ıncarca programul ın execut, ie s, i ıncepe rularea procesului

load time = la execut, ie

loaderul are cunos, tint, a de formatul executabilului

traduce zonele din fis, ierul executabil ın zone de memorie

apelat prin intermediul execve(2)

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 14: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Static linking

folosit la legarea modulelor obiect s, i a bibliotecilor statice

tot codul necesar este “colectat” ın executabil

executabilul poate fi portat pe un sistem ce nu det, inebibliotecile folosite

se poate folosi opt, iunea -static la gcc

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 15: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Dynamic linking

folosit la legarea bibliotecilor dinamice

se adauga put, in cod ın executabil

aducerea codului necesar ın memorie se realizeaza mai tarziu

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 16: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Load time dynamic linking

codul necesar din cadrul bibliotecii este adus ın memorie laload time (lansarea ın execut, ie)

se ocupa loaderul

loaderul trebuie sa s, tie unde sa caute

opt, iunea -L. este folosita la link time nu la load time

se lanseaza procesul s, i se adauga codul bibliotecii

daca biblioteca exista ın memorie (ıncarcata de alt proces),atunci este referita s, i partajata

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 17: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Run time dynamic linking

codul este adus ın memorie la run time (ın momentul ın careprocesul se executa)

similaritate cu malloc

dezvoltatorul precizeaza numele bibliotecii; cautarea se facesimilar ca la load time dynamic linking

dlopen & friends

LoadLibrary & friends

De ce?

pluginshooking (injection)

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 18: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

LD PRELOAD

nume de fis, iere de tip biblioteca ce sunt ıncarcate ınainteaaltora

nu cai catre directoare cu biblioteci (cum se ıntampla laLD LIBRARY PATH

scenariu tipic – hooking

se creeaza un modul ce implementeaza malloc

se creeaza o biblioteca ce cont, ine modululse foloses, te LD PRELOAD

la un apel malloc se apeleaza biblioteca propriefolosind dlopen & friends se apeleaza malloc din bibliotecastandard C

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 19: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

LD DEBUG

depanarea interact, iunii cu biblioteca

export LD DEBUG=help

export LD DEBUG=files

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 20: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Outline

1 Biblioteci

2 Programatic

3 Gestiunea bibliotecilor

4 Intrebari

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 21: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Biblioteci statice

se pastreaza ın directoare standard (/usr/lib, /lib)

altfel, se precizeaza la link time calea catre biblioteca(LD FLAGS, -L.)

nu este nevoie de un management specializat

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 22: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Biblioteci dinamice

rezolvarea referint, elor se face la link time, fara a ıncarcabucat, i de cod ın fis, ierul executabil

calea catre biblioteci trebuie rezolvata la load time (sau runtime)

trebuie configurat loader-ul, care nu este apelat explicit deutilizator (este apelat prin intermediul execve)

man ld.so

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 23: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

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

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 24: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

LD LIBRARY PATH

precizeaza cai suplimentare unde sa fie cautate biblioteciledinamice

similar cu PATH – separat, ie prin caracterul “douapuncte”/“colon” (:)

LD LIBRARY PATH=. ./exec

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 25: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

ldconfig

controleaza cache-ul de de biblioteci dinamice

cache-ul este stocat ın fis, ierul /etc/ld.so.cache

loader-ul cauta bibliotecile urmand un set de pas, i dat, i (manld.so)

ınainte de a cauta ın directoarele implicite (/lib, /usr/lib),va cauta ın cache – viteza sporita

ldconfig este apelat ın general la instalarea de aplicat, ii desistemul de gestiune a pachetelor (apt, yum)

ldconfig -p

ldconfig -n .

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 26: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Outline

1 Biblioteci

2 Programatic

3 Gestiunea bibliotecilor

4 Intrebari

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 27: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Resurse utile

http://www.dwheeler.com/program-library/

MSDNAA – Dynamic Link Libraries –http://msdn.microsoft.com/en-us/library/

ms682589(v=VS.85).aspx

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci

Page 28: Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

Biblioteci Programatic Gestiunea bibliotecilor Intrebari

Keywords

fis, iere obiect

biblioteci

biblioteci statice

biblioteci dinamice

-fPIC

header

linker

loader

ld.so

run-time

load-time

LD PRELOAD

LD DEBUG

LD LIBRARY PATH

/etc/ld.*

ldconfig

Razvan Deaconescu Intalnirile lunare RLUG – Iulie 2011

Biblioteci