Nanolo-kevitra ny hamolavola ny libc ho an'ny LLVM ny mpamorona avy amin'ny Google

Iray amin'ireo mpamorona avy amin'ny Google NANANGANA ao amin'ny lisitry ny mailaka LLVM momba ny fampivoarana tranomboky C (Libc) manara-penitra maromaro ao anatin'ny tetikasa LLVM. Noho ny antony maromaro, tsy afa-po amin'ny libc (glibc, musl) ankehitriny i Google ary eo an-dalam-pamolavolana fampiharana vaovao ny orinasa, izay atolotra ho an'ny LLVM.

Ny fivoaran'ny LLVM dia nampiasaina vao haingana ho fototry ny fananganana fitaovana famorian'i Google. Ny tena hevi-dehibe dia ny hoe raha efa nanomboka namolavola ny libc i Google, nahoana no tsy mamolavola avy hatrany ny rafitra ho ampahany amin'ny LLVM, izay efa manolotra ny tranomboky mahazatra azy manokana ho an'ny C++ (Libc++), saingy tsy manana tranomboky manara-penitra mitovy amin'izany ho an'ny C. (libc).

Ny fampandrosoana dia kasaina hatao amin'ny dingana, mampitombo tsikelikely ny fiasa. Ny safidy voalohany dia atolotra ho toy ny sosona eo anelanelan'ny fampiharana sy ny rafitra Libc, izay hindramina ireo endri-javatra mbola tsy ampiharina. Rehefa tonga amin'ny ambaratongam-piasana iray dia azo ampiasaina ho fanoloana tanteraka ny rafitra Libc ny Libc vaovao. Mikasa ny hanomboka amin'ny fanohanana ny maritrano x86-64, Linux, ary ny fifandraisana static (fampidirana dynamique, fampifandraisana ary rafitra fanampiny no hampiharina faharoa).

Mbola eo amin'ny dingana voalohany amin'ny fampandrosoana ny tetikasa, saingy efa voafaritra ny tanjona fototra:

  • Modularity sy ny fampandrosoana mifanaraka amin'ny filΓ΄zΓ΄fia amin'ny fanaterana tranomboky granular fa tsy ny monolithic set;
  • Fanohanana ny fifandraisana static amin'ny maody henan'omby (Executable tsy miankina amin'ny toerana) ary tsy misy PIE. Fanomezana CRT (C runtime) sy PIE loader ho an'ny executable mifandray statically;
  • Fanohanana ho an'ny ankamaroan'ny asa famakiam-boky C mahazatra, miaraka amin'ny fanampim-panampiana POSIX sy fanitarana manokana momba ny rafitra takian'ny fampiharana efa misy;
  • Mitandrema amin'ny fanitarana manokana amin'ny mpivarotra ary ampio rehefa ilaina izany. Mikasika ny fanohanana ny fanitarana antoko fahatelo, dia aroso ny hampiasana ny fomba fiasan'ny tetikasa Clang sy libc++;
  • Mampiasa fomba fanao tsara indrindra amin'ny fampandrosoana amin'ny alΓ lan'ny kitapom-pitaovana LLVM, toy ny fampiasana fanadiovana sy fitiliana fuzz hatrany am-boalohany.

Iray amin'ireo mpamorona LLVM mavitrika nanondroMazava fa misy dikany ny mandefa libc ho ampahany amin'ny kitapom-pitaovana LLVM, fa matetika, rehefa ilaina izany, dia mampiasa ny tranomboky musl, izay voasoratra tsara, manohana ny maritrano isan-karazany, ary manome ny fiasa ilaina, anisan'izany ny fanohanana ny dinamika. mampifandray. Mety ho ara-drariny ny mampiditra ny musl ao amin'ny LLVM ary mampivelatra azy ho toy ny fork miaraka amin'ny tetikasa lehibe.

Ny hevitrao koa naneho Ny mpanoratra ny tetikasa Musl, izay nanandrana niady hevitra hoe nahoana ny tolo-kevitr'i Google sy ny fampidirana ny Libc ao amin'ny fizarana LLVM dia hevitra tena ratsy:

  • Ny famolavolana sy fitazonana Libc marina, mifanentana ary avo lenta dia asa sarotra. Ny olana dia tsy eo amin'ny habetsaky ny kaody, fa amin'ny fiantohana ny fitondran-tena marina sy ny fahasarotana amin'ny fampiharana ny interface tsara, amin'ny fiheverana ny sosona lehibe amin'ny fampiharana voasoratra ao amin'ny C / C ++, ary koa ny fampiharana amin'ny fiteny hafa, ny fotoana fampiasa azy. avy amin'ny Libc. Ny fomba fiasa tsy misy fiheverana ny nuances dia hitarika fotsiny amin'ny hoe maro ny programa efa misy dia tsy afaka miara-miasa amin'ny Libc, fa ny tetikasa toy izany dia tsy hahaliana ny mpanjifa.
  • Ny fampivoarana orinasa dia mety hanimba ny Libc, saingy manosika azy ho an'ny fampiasana miely patrana, ka ilaina ny manampy hacks mba hiantohana ny fifanarahana amin'ny fampiharana. Ny fampandrosoana eo ambany fiahian'ny tetikasa open source ho an'ny orinasa dia hisintona ny bodofotsy mankany amin'ny filana sy ny vahaolana amin'ny orinasa, ka manimba ny tombontsoan'ny fiarahamonina. Ohatra, raha mahita olana ateraky ny bibikely ao amin'ny programa hafa ianao, amin'ny fampandrosoana voafehy dia mora kokoa ny miantoka fa mifanaraka amin'ity bug ity ny Libc noho ny manamboatra ilay bug. Apple dia mampiasa ny BSD libc fork ho an'ireo tanjona ireo, ary Google dia mampiasa ny musl fork any Fuchsia. Ny zavatra niainan'ny mpamorona musl dia ny nifandray tamin'ny mpisolovava indrindra indrindra mba hanazavana ny olana momba ny fahazoan-dΓ lana, saingy tsy nifandray mihitsy izy mba hanazavana ny antsipiriany ara-teknika alohan'ny hanaovana fanovana tsy misy ilΓ na azy sy manelingelina ny sampana misy azy.
  • Ny tsy fisian'ny monoculture amin'ny fampandrosoana ny libc sy ny fifantohana amin'ny fenitry ny marimaritra iraisana fa tsy ny fanaraha-maso irery, izay mandrisika ny mpamorona fampiharana hampiasa fenitra fa tsy mifamatotra amin'ny fampiharana manokana. Izany no mahatonga ny mpanoratra ny musl manohitra ny fampidirana ny tranomboky ao amin'ny LLVM, ary koa manohitra ny fivoaran'ny libc ao anatin'ny LLVM, satria amin'ity tranga ity dia very ny toetra tsy miankina amin'ny libc ary lasa vahaolana kilasy voalohany ny fampiharana sasany. LLVM, sy ny hafa rehetra dia lasa vahaolana kilasy faharoa.

Source: opennet.ru

Add a comment