Glibc

GNU C bibliotek
En del av GNU-verktøykjeden
Generell informasjon
programtype kjøretidsbibliotek _
utvikler GNU-prosjektet
Første utgivelse 1987
sårbarheter               flere
  • CVE-2016-6323
  • CVE-2016-4429
  • CVE-2016-3706
  • CVE-2016-3075
  • CVE-2016-1234
  • CVE-2015-8779
  • CVE-2015-8778
  • CVE-2015-8777
  • CVE-2015-8776
  • CVE-2015-7547
  • CVE-2015-5277
  • CVE-2015-1781
  • CVE-2015-1473
  • CVE-2015-1472
  • CVE-2015-0235
  • CVE-2014-9761
  • CVE-2014-9402
  • CVE-2014-8121
  • CVE-2014-7817
  • CVE-2014-6040
  • CVE-2014-5119
  • CVE-2014-4043
  • CVE-2014-0475
  • CVE-2013-7424
  • CVE-2013-7423
  • CVE-2013-4788
  • CVE-2013-4458
  • CVE-2013-4332
  • CVE-2013-4237
  • CVE-2013-2207
  • CVE-2013-1914
  • CVE-2013-0242
  • CVE-2012-6656
  • CVE-2012-4424
  • CVE-2012-4412
  • CVE-2012-3480
  • CVE-2012-3406
  • CVE-2012-3405
  • CVE-2012-3404
  • CVE-2012-0864
  • CVE-2011-4609
  • CVE-2011-2702
  • CVE-2011-1659
  • CVE-2011-1658
  • CVE-2011-1095
  • CVE-2011-1089
  • CVE-2011-1071
  • CVE-2011-0536
  • CVE-2010-4756
  • CVE-2010-4052
  • CVE-2010-4051
  • CVE-2010-3856
  • CVE-2010-3847
  • CVE-2010-3192
  • CVE-2010-0830
  • CVE-2010-0296
  • CVE-2010-0015
  • CVE-2009-5064
  • CVE-2009-5029
  • CVE-2009-4881
  • CVE-2009-4880
  • CVE-2004-1453
  • CVE-2004-1382
  • CVE-2004-0968
  • CVE-2003-0859
  • CVE-2003-0028
  • CVE-2002-1265
  • CVE-2002-1146
  • CVE-2002-0684
  • CVE-2000-0959
  • CVE-2000-0824
  • CVE-2000-0335
Tillatelse GNU LGPL
Faktisk tilstand Aktiv
Teknisk informasjon
Planlagt inn C
Versjoner
Siste stabile versjon 2,34 ( info ) (1. august 2021 (1 år, 2 måneder og 16 dager))
lesbare filer
Tidssoneinformasjonsformat
redigerbare filer
Tidssoneinformasjonsformat
Lenker
Offesiell nettside kodelager feilsporing

GNU C-biblioteket , vanligvis kjent som glibc , er standard kjøretidsbibliotek for GNU C - språket . Den distribueres under vilkårene i GNU LGPL -lisensen .

På systemer der det brukes, brukes dette C -biblioteket som gir og definerer systemanrop og andre grunnleggende funksjoner av nesten alle programmer. Det er mye brukt på GNU - systemer og systemer basert på Linux -kjernen . Den er veldig bærbar og støtter et stort antall maskinvareplattformer . På Linux-systemer er det installert under navnet libc6.

Støttet maskinvare og kjerner

Glibc brukes på systemer som fungerer med mange forskjellige kjerner og forskjellige maskinvarearkitekturer. Den vanligste bruken er på systemer med Linux -kjernen på x86-maskinvare, men den støtter også offisielt følgende maskinvareplattformer: x86 , Motorola 680x0 , DEC Alpha , PowerPC , ARM , ETRAX CRIS , S/390 og SPARC . Den har offisiell støtte for Hurd- og Linux- kjerner , selv om det er kraftig lappede versjoner tilgjengelig som fungerer med FreeBSD- og NetBSD-kjerner (som tilfellet er med henholdsvis Debian GNU/kFreeBSD og Debian GNU/NetBSD ). Den brukes også (i modifisert form) som BeOS -boken og dermed i Haiku .

GNU-funksjonalitet

Glibc gir ikke bare funksjonalitet i henhold til POSIX-spesifikasjonene, men gir også GNU-utvidelser til den standarden, slik at applikasjoner kan skrives for POSIX eller for GNU. Glibc implementerer også kjøretidsheuristikk for minneadministrasjon.

Funksjonen mallockan ha mye kompleksitet bak seg. Det er ikke bare begrenset til å reservere den nødvendige mengden dynamisk minne i minnehaugen som administreres av operativsystemkjernen. Glibc opprettholder flere blokker med dynamisk minne som overskrider kapasiteten som kreves. Disse blokkene administreres når det passer deg uten at du trenger å ringe operativsystemkjernen kontinuerlig. [ 1 ]

Et annet eksempel på kjøretidsheuristikk implementert i Glibc består i å velge systemkallet som tilsvarer arkitekturen og versjonen av Linux. [ 2 ] Linux har flere systemanrop og ikke alle er tilgjengelige for alle arkitekturer. I tillegg, for samme systemanropsspesifikasjon kan det være forskjellige implementeringer, for eksempel den som har ansvaret for å avkorte filer ( truncatefra Glibc). Dette systemanropet har to versjoner i Linux: truncateog truncate64. Glibc tar seg av å velge riktig når et program ringer truncatefra Glibc.

GNU C-biblioteket gir funksjonen syscallfor å kunne påkalle kjernespesifikke systemanrop. [ 3 ]​ Hvis systemkjernen ikke har det forespurte systemkallet , returnerer Glibc verdien -1og feilkoden ENOSYS(funksjonen er ikke implementert) lagres i variabelen errno. Et eksempel på funksjonalitet som krever bruk av syscall()er futexLinux-systemkallet. Dette kallet brukes av Glibc for å implementere PThreads mutex - låser GNU /Linux . [ 4 ] Glibc tilbyr ikke en innpakning som skal brukes direkte av en brukerplassapplikasjon. [ 5 ] Ingen innpakning tilgjengelig, programmerer kan bruke via GNU proxy-funksjon . Detaljene til maskinvarearkitekturen når du kaller opp kjernen må administreres av applikasjonen. Detaljene i C-språkkonvensjonen håndteres av Glibc: lagre og gjenopprett registre, aktiver programvareavbrudd for kjerneinnføring , returverdi for systemanrop og variabel . Bruk gjør applikasjonsportabilitet vanskelig, men det er enklere enn å måtte administrere registre, returverdier og programvareavbrudd i assembler. futexsyscallerrnosyscall

Vanligvis bruker ikke en applikasjon knyttet til C-biblioteket innebygde rutiner som selv håndterer bruken av Linux-systemanropsgrensesnittet. Å gjøre det betyr å forstyrre forvaltningen av biblioteket. brkFor eksempel, bruk av y -systemanrop sbrksom håndterer pausepekeren (programbrudd) forstyrrer malloc.

Det første som skal kjøres i et Glibc-koblet program er en rekke rutiner kalt fra assembler-filen start.S. Denne filen tilhører GNU C-biblioteket. Initialiserer en rekke funksjonspekere og anrop __libc_start_main. Denne funksjonen utfører ytterligere initialiseringer, inkludert å oppdage prosessorfamilien for å velge optimaliserte versjoner av bibliotekfunksjonene. Deretter mainkalles funksjonen. [ 6 ]

GNU-utvidelsene har implementert forskjellige funksjoner som senere ble standardisert som en del av C-språket i C90- og C99-standarden.

Glibc brukes av GCC . Portabiliteten til GCC+Glibc har gjort det mulig for Intel å optimalisere distribusjonen av GNU/Linux Clear Linux. Når de kompilerer med GCC, bruker de et alternativ som er tilgjengelig for å generere flere versjoner av en programrutine. Dette gjør dem i stand til å ha operativsystemet optimalisert for ulike generasjoner av prosessorer. De bruker deretter Glibcs ​​deteksjons- og selvoptimaliseringsevne for å laste CPU -optimaliserte bibliotekbinærfiler . Disse binærfilene distribueres med Clear Linux, og opprettholder flere versjoner av det samme biblioteket. [ 7 ] Ytelsesresultatene gir en fordel på mer enn 10 % til fordel for Clear Linux mot Ubuntu 17.10. [ 8 ]

Glibc-innhold

libc.[a,so]-biblioteket, som implementerer funksjonaliteten til C-språkstandarden og GNU C, omfatter totalt ca. 500 system- og funksjonskall.

Referanser

  1. DJ Delorie, Andreas Schwab, Adhemerval Zanella (2016,2017). "Oversikt over Malloc" (på engelsk) . Hentet 7. september 2017 .  
  2. ^ Andries Brouwer, Michael Kerrisk (1998, 2007). syscalls - Linux- systemanrop . Hentet 7. september 2017 . 
  3. The Regents of University of California (1980, 1991, 1993). syscall - indirekte systemanrop . Hentet 7. september 2017 . 
  4. ^ Darren Hart (11. november 2009). «En futex-oversikt og oppdatering» (på engelsk) . LWN.net . Hentet 7. september 2017 .  
  5. Thomas Gleixner, Michael Kerrisk (2015). futex - rask brukerplasslåsing . Hentet 7. september 2017 . 
  6. Gentoo. "Mini FAQ om misc libc/gcc crt-filene." . Gentoo Linux (på engelsk) . Gentoo Linux . Hentet 8. september 2017 . 
  7. Michael Larabel (15. september 2017). "Tøm Linux og deres kjærlighet til FMV + dl_platform/dl_hwcap i ytelsens navn - Phoronix" . www.phoronix.com (på engelsk) . Hentet 15. september 2017 . 
  8. Michael Larabel (12. september 2017). "Core i9 7900X vs. Threadripper 1950X på Ubuntu 17.10, Antergos, Clear Linux - Phoronix» . www.phoronix.com (på engelsk) . Hentet 15. september 2017 . 

Eksterne lenker