Google á០developer áá
áºáŠážááŒá
áºáááºá
LLVM ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá»á¬ážááᯠáááŒá¬áá±ážáá®á Google á áááºáááºáá±ážáááááá¬áá»á¬áž áááºáá±á¬ááºáááºá¡ááœáẠá¡ááŒá±áá¶á¡ááŒá Ạá¡áá¯á¶ážááŒá¯áá²á·áááºá á¡ááá á¡áá°á¡áááŸá¬ Google ááẠáááºážá libc ááᯠá áááºáá±ážááœá²áá±ááŒá®ááá¯áá»áŸááºá C++ (Libc++) á¡ááœáẠáááºážáááá¯ááºááá¯ááºá á¶ááŒá á¬ááŒáá·áºááá¯ááºááᯠáá±ážáá±á¬ááºáá¬ážááŒá®ážááŒá áºááá·áº LLVM á á¡á áááºá¡ááá¯ááºážáá áºáá¯á¡áá±ááŒáá·áº áááºážá áá áºá¡á¬áž áá»ááºáá»ááºážááááºáá®ážáá² C++ á¡ááœáẠá¡áá¬ážáá° á á¶á á¬ááŒáá·áºááá¯ááºáá áºáᯠáááŸááá«á (libc)á
ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážááᯠá¡ááá·áºááá·áºáá¯ááºáá±á¬ááºááẠá á®á ááºáá¬ážááŒá®áž áá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá»á¬ážááᯠáááŒááºážááŒááºáž ááá¯ážááŒáŸáá·áºáá¯ááºáá±á¬ááºááœá¬ážáááºááŒá áºáááºá áááááœá±ážáá»ááºá áá¬áá»á¬ážááᯠá¡ááá®áá±ážááŸááºážááŸáá·áº á áá ẠLibc á¡ááŒá¬áž á¡ááœáŸá¬áá áºáá¯á¡ááŒá Ạáá®ááá¯ááºážáá±ážááœá²ááẠá¡ááá¯ááŒá¯áá¬ážááŒá®ážá á¡áá±á¬ááºá¡áááºááá±á¬áºááá±ážááá·áº á¡ááºá¹áá«áááºáá»á¬ážááᯠáá»á±ážáá°áááºááŒá áºáááºá áá¯ááºáá±á¬ááºáá»ááºá¡áá»áá¯á·á¡ááá·áºááá¯á·áá±á¬ááºááŸáááŒá®ážáá±á¬ááºá Libc á¡áá áºááᯠá áá ẠLibc á¡ááœáẠááŒá®ážááŒáá·áºá á¯á¶áá±á¬ á¡á á¬ážááá¯ážááŸá¯á¡ááŒá Ạá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠx86-64 áááá¯áá¬ááá¬á Linuxá ááŸáá·áº static linking á¡ááœáẠáá¶á·ááá¯ážááŸá¯ááŒáá·áº á áááºááẠá á®á ááºáá¬ážááẠ(dynamic loadingá linking ááŸáá·áº á¡ááá¯áááá¯áá¬áá»á¬ážááᯠáá¯áááá¡á¬ážááŒáá·áº á¡áá±á¬ááºá¡áááºáá±á«áºáááº)á
ááá±á¬áá»ááºááẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á áááŠážá¡ááá·áºááœáẠááŸááá±áá²ááŒá áºáá±á¬áºáááºáž á¡ááŒá±áá¶áááºážááá¯ááºáá»á¬ážááᯠáááºááŸááºááŒá®ážááŒá áºáááº-
- monolithic set ááá¯ááºáá² granular á á¬ááŒáá·áºááá¯ááºááᯠáá±ážá¡ááºááŒááºážá áá¿áááŸáá·áºá¡áá® ááœá±á·áá»á¬ážááŸá¯ááŸáá·áº ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á
- áá¯ááºáá»á¬ážááœáẠáááºááŒáááºáá±á¬ááá·áºááºáá»áááºááŒááºážá¡ááœáẠáá¶á·ááá¯ážááŸá¯
ááá¯áẠ(Position-independent executables) ááŸáá·áº PIE ááá«áá²á áááºááŒáááºá áœá¬áá»áááºáááºáá¬ážáá±á¬ á á®á á¥áºáá¯ááºáá±á¬ááºááá¯ááºááá·áºá¡áá¬áá»á¬ážá¡ááœáẠCRT (C runtime) ááŸáá·áº PIE loader ááᯠáá¶á·ááá¯ážáá±ážááŒááºážá - POSIX áá±á«ááºážááá·áºááŸá¯áá»á¬ážááŸáá·áº ááŸáááŒá®ážáá¬áž á¡ááá®áá±ážááŸááºážáá»á¬ážá០ááá¯á¡ááºáá±á¬ á áá áºá¡ááá¯áẠááá¯ážáá»á²á·ááŸá¯á¡áá»áá¯á·ááŸáá·áºá¡áá° á ᶠC á á¬ááŒáá·áºááá¯ááºáá¯ááºáá±á¬ááºáá»ááºá¡áá»á¬ážá á¯á¡ááœáẠáá¶á·ááá¯ážááŸá¯á
- áá±á¬ááºážáá»áá°-áá®ážááá·áº ááá¯ážáá»á²á·ááŸá¯áá»á¬ážááᯠááááá¬ážáá«á ááá¯á¡ááºááá·áºá¡áá«ááŸáᬠááá·áºááœááºážáá«á Third-party extensions áá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ááŸáá·áºáááºáááºáá Clang ááŸáá·áº libc++ ááá±á¬áá»ááºáá»á¬ážá áá»ááºážáááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááẠá¡ááá¯ááŒá¯áá¬ážáááºá
- á¡á ááááºážá áááºáá±ážáááºááŸáá·áº fuzz á ááºážáááºááŒááºážáá²á·ááá¯á·áá±á¬ LLVM áááááá¬á¡á á¯á¶ááᯠá¡áá¯á¶ážááŒá¯á ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááœáẠá¡áá±á¬ááºážáá¯á¶ážá¡áá±á·á¡áá»áá·áºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá
áááºááŒáœáá±á¬ LLVM developer áá»á¬ážáá²ááŸáá
áºáŠáž
áááºážáá²á·áááºááŒááºáá»ááºáááºáž
- ááŸááºáááºáá±á¬á ááá¯ááºáááºáá®ááŒá®áž á¡áááºá¡ááœá±ážááŒáá·áº Libc ááᯠáááºáá±á¬ááºááááºážááááºážááŒááºážááẠá¡ááœááºáááºáá²áá±á¬á¡áá¯ááºááŒá áºáááºá ááŒá¿áá¬ááẠáá¯ááºááá¬áááœááºááá¯ááºáá±á¬áºáááºážá ááŸááºáááºáá±á¬á¡ááŒá¯á¡áá°ááŸáá·áº á¡ááºáá¬áá±á·á áºáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ááœáẠá¡áááºá¡áá²áá»á¬ážááᯠáá±áá»á¬á á±áááºá¡ááœááºá C/C++ ááœáẠáá±ážáá¬ážáá²á·áá°ážááá·áº á¡áá¯á¶ážáá»áááá¯ááááºáá»á¬ážá¡ááŒáẠá¡ááŒá¬ážáá¬áá¬á áá¬ážááŒáá·áº á¡ááºááºááá®áá±ážááŸááºážáá»á¬ážá á¡áá¯á¶ážááŒá¯ááá·áº runtimeá Libc á០ááŸáááŒá®ážáá¬ážáááá¯ááááºáá»á¬ážá áœá¬ááẠLibc ááŸáá·áºá¡áá¯ááºáá¯ááºááá¯ááºáááºááá¯ááºáá°áá±á¬á¡áá»ááºááá¯áá¬ááá·áºááœááºážá ááºážá á¬ážááŒááºážááŒáá·áºáá¬ááá¯ááá±á¬áá»ááºáááºá á¬ážáá¯á¶ážáá°áá»á¬ážá¡ááœááºá áááºáááºá á¬ážáááá·áºáááºááá¯ááºáá±á
- áá±á¬áºááá¯ááááºááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááẠLibc ááᯠáá»ááºá á®ážá á±ááá¯ááºáá±á¬áºáááºáž áááºážááᯠáá»ááºáá»ááºááŒáá·áºááŒáá·áºá¡áá¯á¶ážááŒá¯áááºá¡ááœáẠááœááºážá¡á¬ážáá±ážááŒááºážááŒáá·áº á¡ááºááºáá®áá±ážááŸááºážáá»á¬ážááœáẠááá¯ááºáááºááŸá¯ááŸáá á±ááẠáááºááºáá»á¬ážááᯠááá·áºááœááºážáááºááá¯á¡ááºáááºá áá±á¬áºááá¯áááẠopen source ááá±á¬áá»ááºáá áºáá¯á áá¶á·ááá¯ážáá°áá®ááŸá¯á¡á±á¬ááºááœáẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááẠáá¯áá¹ááá®á ááá¯á¡ááºáá»ááºáá»á¬ážááŸáá·áº ááŒá±ááŸááºážáá»ááºáá»á¬ážáá®ááá¯á· á á±á¬ááºááᯠááœá²áááºáááºááŒá áºááŒá®áž áááºááœá¬á á¡áá»áá¯ážá á®ážááœá¬ážááᯠááááá¯ááºá á±áá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠá¡ááŒá¬ážáááá¯ááááºáá áºáá¯ááŸá bug áá áºáá¯ááŒá±á¬áá·áºááŒá áºáááá·áº ááŒá¿áá¬ááᯠááŸá¬ááœá±áá±á¬áºáá¯ááºáá«áá ááááºážáá»á¯ááºáá¬ážáá±á¬ ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááœáẠLibc ááẠbug ááᯠááá¯ááºááá¯ááºááŒá¯ááŒááºááŒááºážááẠဠbug ááŸáá·áº áááá¬áááŒá áºááŒá±á¬ááºáž áá±áá»á¬á á±ááẠááá¯ááá¯ááœááºáá°áááºá Apple ááẠá€áááºááœááºáá»ááºáá»á¬ážá¡ááœáẠBSD libc fork ááá¯á¡áá¯á¶ážááŒá¯ááŒá®áž Google ááẠFuchsia ááœáẠmusl áááºáááºážááá¯á¡áá¯á¶ážááŒá¯áááºá Musl developer á á¡ááœá±á·á¡ááŒá¯á¶ááŸá¬ ááá¯ááºá ááºááŒá¿áá¬áá»á¬ážááᯠááŸááºážáááºážááẠááŸá±á·áá±áá»á¬ážá០á¡áááá¡á¬ážááŒáá·áº áááºááœááºáá²á·áá±á¬áºáááºáž áááºážáá¡ááá¯ááºážá¡áááºáá»á¬ážááᯠá¡áá¯á¶ážááááºá á¡ááŸá±á¬ááºá¡ááŸááºááŒá áºá á±áá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážáááŒá¯áá¯ááºáá® áááºážááá¬ááá¯ááºáá¬á¡áá±ážá áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠááŸááºážáááºážáá±ážááẠá¡áááºá¡ááœááºááááŸááá²á·áá«á
- libc ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááœáẠmonoculture áááŸáááŒááºážááŸáá·áº áá áºáŠážáá»ááºážááááºážáá»á¯ááºááŒááºážááẠá¡áá»á¬ážááá¹áááŒáá·áºáá±á¬ááºážááŸááºáá±á¬ á á¶áá»áááºá á¶ááœáŸááºážáá»á¬ážá¡áá±á«áº á¡á¬áá¯á¶á áá¯ááºááŒááºážááŒá áºááŒá®ážá áááá»áá±á¬á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááŸáá·áºáá»áááºáááºááá·áºá¡á á¬áž á¡ááá®áá±ážááŸááºážáá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážá¡á¬áž á á¶ááŸá¯ááºážáá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááẠááŸá¯á¶á·áá±á¬áºáá±ážáá«áááºá ááá¯á·ááŒá±á¬áá·áº musl áá á¬áá±ážáá°ááẠLLVM ááœááºáá°áá á¬ááŒáá·áºááá¯ááºááá¯ááá·áºááœááºážááŒááºážá¡ááŒáẠLLVM á¡ááœááºážááŸá libc áááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááá¯ááá·áºáá»ááºáááºááŒá áºáá±á¬ááŒá±á¬áá·áºá á€á¡ááŒá±á¡áá±ááœáẠlibc áááœááºáááºáá±á¬ááá±á¬ááá¬ááááºáá»á±á¬ááºáá¯á¶ážááœá¬ážááŒá®ážá¡áá»áá¯á·áá±á¬á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážá¡ááœááºááááááºážá á¬ážááŒá±ááŸááºážáá»ááºááŒá áºáá¬áááºá LLVM ááŸáá·áº á¡ááŒá¬ážá¡áá¬á¡á¬ážáá¯á¶ážááẠáá¯ááááááºážá á¬ážááŒá±ááŸááºážáá»ááºááŒá áºáá¬áááºá
source: opennet.ru