ΠΠ°ΡΠΎΠ½ ΠΠ°Π»Π»ΠΌΠ°Π½ (Aaron Ballman), Π³Π»Π°Π²Π΅Π½ ΡΡΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π» Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Clang ΠΈ ΡΡΠ°ΡΡΠ½ΠΈΠΊ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠΈΡΠ΅ WG21 (C++) ΠΈ WG14 (C), ΡΡΠ°ΡΡΠΈΡΠ° Π΄ΠΈΡΠΊΡΡΠΈΡ Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΠ΅ΠΆΠΈΠΌ Π·Π° Π·Π°ΡΠΈΠ»Π²Π°Π½Π΅ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Clang. ΠΠΎΠ²ΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° Π½Π°Π±ΠΎΡ ΠΎΡ ΠΎΠΏΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠΊΡΠ΅ΠΏΡΡ Π·Π°ΡΠΈΡΠ°ΡΠ°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΡΠ»Π°Π³Π° Β«-fhardenedΒ», Π΄ΠΎΠ±Π°Π²Π΅Π½ Π² GCC 14, ΠΏΡΠΈ ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Ρ ΠΎΠΏΡΠΈΠΈ Β«-D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS -ftrivial-auto-var-init=zero -fPIE -pie -Wl,-z,relro,-z,now -fstack-protector-strong -fstack-clash-protection -fcf-protection=fullΒ».
ΠΡΠ±Π΅Π»ΡΠ·Π²Π° ΡΠ΅, ΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° Π·Π°ΡΠΈΠ»Π²Π°Π½Π΅ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π² ΡΡΠ°Π½Π΄Π°ΡΡΠΈΡΠ΅ C ΠΈ C++, Π½ΠΎ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ Π½Π΅ Π΅ Π±ΡΡΠ·, ΠΊΠ°ΡΠΎ Π² Clang Π²Π΅ΡΠ΅ ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ Π·Π°ΡΠΈΡΠΈ. Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° Π·Π°ΡΠΈΡΠ° ΡΠ΅ΡΡΠΎ Π²ΠΎΠ΄ΡΡ Π΄ΠΎ ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π½Π΅ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Π½Π°ΡΡΡΠ°Π²Π°Π½Π΅ Π½Π° ABI, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ΅ Π΄Π° ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Ρ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΎΠΏΡΠΈΠΈ ΡΠ° ΡΠ°Π·ΠΏΠΎΠΊΡΡΠ°Π½ΠΈ (ΡΠ»Π°Π³ΠΎΠ²Π΅ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈΡΠ΅, ΡΠ»Π°Π³ΠΎΠ²Π΅ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΈΡΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ, ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ, ΡΠ΅ΠΆΠΈΠΌΠΈ Π½Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ°, ΠΌΠ°ΠΊΡΠΎΡΠΈ), ΡΡΡΠ΄Π½ΠΎ ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠ°Ρ ΠΈ ΠΈΠ·ΠΏΠ°Π΄Π°Ρ ΠΎΡ ΠΏΠΎΠ»Π΅Π·ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ.
ΠΠ΄ΠΈΠ½Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ½ΠΈΡΠΈΡΠΈΡΠ° Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΠ° ΠΎΠΏΡΠΈΠΈ ΠΈ ΠΎΠΏΡΠΎΡΠ°Π²Π° ΡΡΡ Π½ΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π·Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΠΆΠΈΠΌΠ° Π·Π° Π·Π°ΡΠΈΠ»Π΅Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΡΠΆΠ΄Π°Ρ ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈΡ ΡΡΠ΅Π· ΡΠ»Π°Π³ Β«-fhardenedΒ», Π½Π°Π±ΠΎΡ ΠΎΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Β«βconfig=hardenedΒ», ΠΎΡΠ΄Π΅Π»Π΅Π½ Π΄ΡΠ°ΠΉΠ²ΡΡ (clang βdriver-mode) ΠΈΠ»ΠΈ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΎΠΏΡΠΈΠΈ Β«-fhardened, -mhardened ΠΈ -WhardenedΒ», ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄ ΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π° Π½Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ. Π Π΅ΠΆΠΈΠΌΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±Ρ Π²Π°ΡΠ°:
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°: -ftrivial-auto-var-init, -fPIE, -fcf-protection ΠΈ Ρ.Π½.
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄ Π·Π° ΡΠ΅Π»Π΅Π²ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ: -mspeculative-load-hardening, -mlvi-hardening ΠΈ Ρ.Π½.
- ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ: -Wall, -Wextra, -Werror=return-type ΠΈ Ρ.Π½.
- Π Π΅ΠΆΠΈΠΌΠΈ Π·Π° ΡΡΠΈΠ»Π²Π°Π½Π΅ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Ρ ΡΡΠ½ΠΊΡΠΈΠΈ.
- ΠΠ°ΠΊΡΠΎΡΠΈ: _FORTIFY_SOURCE, _GLIBCXX_ASSERTIONS ΠΈ Ρ.Π½.
- ΠΠ·ΠΈΡΠΊΠ²Π°Π½Π΅ Π·Π° ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΠΈΠ·Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡ Π½Π° Π΅Π·ΠΈΠΊΠ°.
- ΠΡΠΊΠ°Π· Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΈ C89 ΠΈ C++98.
- ΠΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ»Π°Π³ΠΎΠ²Π΅ Π½Π° ΡΠ²ΡΡΠ·Π²Π°ΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° Π°Π΄ΡΠ΅ΡΠ½Π° ΡΠ°Π½Π΄ΠΎΠΌΠΈΠ·Π°ΡΠΈΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
