SlideShare a Scribd company logo
1 of 28
Download to read offline
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Biblioteci                   Programatic   Gestiunea bibliotecilor                        ˆ
                                                                                          Intreb˘ri
                                                                                                a




Keywords


             fisiere obiect
              ,                               ld.so
             biblioteci                       run-time
             biblioteci statice               load-time
             biblioteci dinamice              LD PRELOAD
             -fPIC                            LD DEBUG
             header                           LD LIBRARY PATH
             linker                           /etc/ld.*
             loader                           ldconfig



R˘zvan Deaconescu
 a                                                              ˆ alnirile lunare RLUG – Iulie 2011
                                                                Intˆ
Biblioteci

More Related Content

More from Asociatia ProLinux

Ciprian Badescu, Eugen Stoianovici - CUBRID
Ciprian Badescu, Eugen Stoianovici - CUBRIDCiprian Badescu, Eugen Stoianovici - CUBRID
Ciprian Badescu, Eugen Stoianovici - CUBRIDAsociatia ProLinux
 
Petru Ratiu - Linux bonding meets sysfs
Petru Ratiu - Linux bonding meets sysfsPetru Ratiu - Linux bonding meets sysfs
Petru Ratiu - Linux bonding meets sysfsAsociatia ProLinux
 
Calin Burloiu - Prelucrarea fisierelor video in Linux
Calin Burloiu - Prelucrarea fisierelor video in LinuxCalin Burloiu - Prelucrarea fisierelor video in Linux
Calin Burloiu - Prelucrarea fisierelor video in LinuxAsociatia ProLinux
 
Ovidiu Constantin - Linux From Scratch 6.8
Ovidiu Constantin - Linux From Scratch 6.8Ovidiu Constantin - Linux From Scratch 6.8
Ovidiu Constantin - Linux From Scratch 6.8Asociatia ProLinux
 
Cornel Florentin Dimitriu - Tune in... on Linux
Cornel Florentin Dimitriu - Tune in... on LinuxCornel Florentin Dimitriu - Tune in... on Linux
Cornel Florentin Dimitriu - Tune in... on LinuxAsociatia ProLinux
 
Radu Zoran - Linux pe un Tablet PC
Radu Zoran - Linux pe un Tablet PCRadu Zoran - Linux pe un Tablet PC
Radu Zoran - Linux pe un Tablet PCAsociatia ProLinux
 
Ovidiu Constantin - Debian Live
Ovidiu Constantin - Debian LiveOvidiu Constantin - Debian Live
Ovidiu Constantin - Debian LiveAsociatia ProLinux
 
Ovidiu constantin dd-wrt vs open wrt
Ovidiu constantin   dd-wrt vs open wrtOvidiu constantin   dd-wrt vs open wrt
Ovidiu constantin dd-wrt vs open wrtAsociatia ProLinux
 
Workflow fotografic cu Darktable - Nicu Buculei
Workflow fotografic cu Darktable - Nicu BuculeiWorkflow fotografic cu Darktable - Nicu Buculei
Workflow fotografic cu Darktable - Nicu BuculeiAsociatia ProLinux
 
Open-Source Knowledge - Cornel-Florentin Dimitriu
Open-Source Knowledge - Cornel-Florentin DimitriuOpen-Source Knowledge - Cornel-Florentin Dimitriu
Open-Source Knowledge - Cornel-Florentin DimitriuAsociatia ProLinux
 
DD-WRT Linux router on steroids - Radu Zoran
DD-WRT Linux router on steroids - Radu ZoranDD-WRT Linux router on steroids - Radu Zoran
DD-WRT Linux router on steroids - Radu ZoranAsociatia ProLinux
 
Cinepaint - cu ce se mănîncă?
Cinepaint - cu ce se mănîncă?Cinepaint - cu ce se mănîncă?
Cinepaint - cu ce se mănîncă?Asociatia ProLinux
 

More from Asociatia ProLinux (20)

Ciprian Badescu, Eugen Stoianovici - CUBRID
Ciprian Badescu, Eugen Stoianovici - CUBRIDCiprian Badescu, Eugen Stoianovici - CUBRID
Ciprian Badescu, Eugen Stoianovici - CUBRID
 
Ovidiu Constantin - ReactOS
Ovidiu Constantin - ReactOSOvidiu Constantin - ReactOS
Ovidiu Constantin - ReactOS
 
Petru Ratiu - Linux bonding meets sysfs
Petru Ratiu - Linux bonding meets sysfsPetru Ratiu - Linux bonding meets sysfs
Petru Ratiu - Linux bonding meets sysfs
 
Calin Burloiu - Prelucrarea fisierelor video in Linux
Calin Burloiu - Prelucrarea fisierelor video in LinuxCalin Burloiu - Prelucrarea fisierelor video in Linux
Calin Burloiu - Prelucrarea fisierelor video in Linux
 
Alex Juncu - UDPCast
Alex Juncu - UDPCastAlex Juncu - UDPCast
Alex Juncu - UDPCast
 
Razvan Deaconescu - Org-Mode
Razvan Deaconescu - Org-ModeRazvan Deaconescu - Org-Mode
Razvan Deaconescu - Org-Mode
 
Ovidiu Constantin - Linux From Scratch 6.8
Ovidiu Constantin - Linux From Scratch 6.8Ovidiu Constantin - Linux From Scratch 6.8
Ovidiu Constantin - Linux From Scratch 6.8
 
Cornel Florentin Dimitriu - Tune in... on Linux
Cornel Florentin Dimitriu - Tune in... on LinuxCornel Florentin Dimitriu - Tune in... on Linux
Cornel Florentin Dimitriu - Tune in... on Linux
 
Radu Zoran - Linux pe un Tablet PC
Radu Zoran - Linux pe un Tablet PCRadu Zoran - Linux pe un Tablet PC
Radu Zoran - Linux pe un Tablet PC
 
Ovidiu Constantin - Debian Live
Ovidiu Constantin - Debian LiveOvidiu Constantin - Debian Live
Ovidiu Constantin - Debian Live
 
Razvan Deaconescu - Redmine
Razvan Deaconescu - RedmineRazvan Deaconescu - Redmine
Razvan Deaconescu - Redmine
 
Ovidiu constantin 1 airopl
Ovidiu constantin   1 airoplOvidiu constantin   1 airopl
Ovidiu constantin 1 airopl
 
Ovidiu constantin dd-wrt vs open wrt
Ovidiu constantin   dd-wrt vs open wrtOvidiu constantin   dd-wrt vs open wrt
Ovidiu constantin dd-wrt vs open wrt
 
Alexandru balan frams
Alexandru balan   framsAlexandru balan   frams
Alexandru balan frams
 
Workflow fotografic cu Darktable - Nicu Buculei
Workflow fotografic cu Darktable - Nicu BuculeiWorkflow fotografic cu Darktable - Nicu Buculei
Workflow fotografic cu Darktable - Nicu Buculei
 
Open-Source Knowledge - Cornel-Florentin Dimitriu
Open-Source Knowledge - Cornel-Florentin DimitriuOpen-Source Knowledge - Cornel-Florentin Dimitriu
Open-Source Knowledge - Cornel-Florentin Dimitriu
 
DD-WRT Linux router on steroids - Radu Zoran
DD-WRT Linux router on steroids - Radu ZoranDD-WRT Linux router on steroids - Radu Zoran
DD-WRT Linux router on steroids - Radu Zoran
 
Ziua libertatii programelor
Ziua libertatii programelorZiua libertatii programelor
Ziua libertatii programelor
 
Cinepaint - cu ce se mănîncă?
Cinepaint - cu ce se mănîncă?Cinepaint - cu ce se mănîncă?
Cinepaint - cu ce se mănîncă?
 
Open source și marketing
Open source și marketingOpen source și marketing
Open source și marketing
 

Răzvan Deaconescu - Biblioteci, gestiunea bibliotecilor

  • 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
  • 28. Biblioteci Programatic Gestiunea bibliotecilor ˆ Intreb˘ri a Keywords fisiere obiect , ld.so biblioteci run-time biblioteci statice load-time biblioteci dinamice LD PRELOAD -fPIC LD DEBUG header LD LIBRARY PATH linker /etc/ld.* loader ldconfig R˘zvan Deaconescu a ˆ alnirile lunare RLUG – Iulie 2011 Intˆ Biblioteci