ΠΠ°ΡΠΎΠ½ ΠΠ°Π»Π»ΠΌΠ°Π½ (Aaron Ballman), Π³Π»Π°Π²Π½ΡΠΉ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Clang ΠΈ ΡΡΠ°ΡΡΠ½ΠΈΠΊ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ² WG21 (C++) ΠΈ WG14 (C), Π½Π°ΡΠ°Π» ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Clang ΡΠ΅ΠΆΠΈΠΌΠ° ΡΡΠΈΠ»Π΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. ΠΠΎΠ²ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ°Π·ΠΎΠΌ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Π±ΠΎΡ ΠΎΠΏΡΠΈΠΉ Π΄Π»Ρ ΡΡΠΈΠ»Π΅Π½ΠΈΡ Π·Π°ΡΠΈΡΡ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠΌ Π² GCC 14 ΡΠ»Π°Π³ΠΎΠΌ Β«-fhardenedΒ», ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΎΠΏΡΠΈΠΈ Β«-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++, Π½ΠΎ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ Π±ΡΡΡΡΡΠΉ, ΠΏΡΠΈ ΡΠΎΠΌ, ΡΡΠΎ Π² Π‘lang ΡΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π·Π°ΡΠΈΡΡ. Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π·Π°ΡΠΈΡΡ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΠΌ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π°ΡΡΡΠ΅Π½ΠΈΡ 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
