ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Google ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ GWPSan, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈ Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈΡΠ΅ x86-64 ΠΈ ARM64. GWPSan ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° LD_PRELOAD ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, Π½Π°Π»ΠΈΡΠ½ΠΈ Π² ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux, ΠΊΠ°ΡΠΎ ΡΠΏΠΈΡΠ°Π½Π΅ (PERF_TYPE_BREAKPOINT) ΠΈ ΡΡΠΌΠΏΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈ. ΠΠΎΠ΄ΡΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C++ ΠΈ Π΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ Apache 2.0.
GWPSan Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ ΠΊΠ°ΡΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅Π½ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊ, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅ Π³ΡΠ΅ΡΠΊΠΈ. GWPSan ΠΈΠ·Π²ΡΡΡΠ²Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ·, Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ ΡΡΠ΅Π· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° ΡΠΈΠ³Π½Π°Π»ΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΌΠΈΠ½Π΅ Π±Π΅Π· ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠ»Π°Π³ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°, Π΄ΠΎΠ±Π°Π²ΡΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΡΠ° ΠΏΠΎΠ½Π΅ Clang 18 ΠΈ ΡΠ΄ΡΠΎ Π½Π° Linux 6.4.
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ ΡΡΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ°:
- UAR (ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΡΠ»Π΅Π΄ Π²ΡΡΡΠ°Π½Π΅) β ΠΎΡΠΊΡΠΈΠ²Π° Π³ΡΠ΅ΡΠΊΠΈ, ΠΏΡΠΈΡΠΈΠ½Π΅Π½ΠΈ ΠΎΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±Π΅ΠΊΡ Π² ΡΡΠ΅ΠΊΠ° ΡΠ»Π΅Π΄ ΠΈΠ·Ρ ΠΎΠ΄ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡΡΠ°, Π² ΠΊΠΎΡΡΠΎ ΡΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ Π΅ Π±ΠΈΠ» ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½. ΠΠ°ΡΠΈΡΠ°ΡΠ° Π΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π° ΡΡΠ΅Π· ΠΏΡΠΈΡ Π²Π°ΡΠ°Π½Π΅ Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈ ΠΈ ΠΈΠ·Ρ ΠΎΠ΄ΡΡΠΈ ΡΠΎΡΠΊΠΈ Π·Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° β ΠΏΡΠΈ Π²Ρ ΠΎΠ΄ ΡΡΠ΅ΠΊΠ° ΡΠ΅ Π·Π°ΠΌΠ΅Π½Ρ Ρ ΠΊΠΎΠΏΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°, Π° ΠΏΡΠΈ ΠΈΠ·Ρ ΠΎΠ΄ ΡΡΠ°ΡΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΡΡΠ΅ΠΊΠ° ΡΠ΅ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°.
- TSan (Thread Sanitizer) β ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΡΡΡΠΎΡΠ½ΠΈΡ Π½Π° Π³ΠΎΠ½ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΡΠΊΠΈ (Data-race), ΠΊΠΎΠΈΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈ Π½ΠΈΡΠΊΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ΡΠ°Ρ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ ΠΎΠ±ΡΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, Π±Π΅Π· Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΈ Π·Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ°. ΠΠ°ΡΠΈΡΠ°ΡΠ° Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½Π° Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΈ ΡΠΎΡΠΊΠΈ Π½Π° ΡΠΏΠΈΡΠ°Π½Π΅, ΡΠ²ΡΡΠ·Π²Π°ΡΠΈ ΡΠ΅ Ρ ΠΎΠ±ΡΠΈΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ°Π±ΠΎΡΠ²Π°, ΡΠΏΠΈΡΠ° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π½ΠΈΡΠΊΠ°ΡΠ° Π·Π° ΠΊΡΠ°ΡΡΠΊ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅ ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΠΏΠ°ΡΠ·Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π΄Π°Π»ΠΈ Π½Π΅ Π΅ ΡΡΠ°Π±ΠΎΡΠΈΠ»Π° ΡΠΎΡΠΊΠ° Π½Π° ΡΠΏΠΈΡΠ°Π½Π΅ Π·Π° Π΄ΡΡΠ³Π° Π½ΠΈΡΠΊΠ°.
- LMSan (Lightweight Memory Sanitizer) β ΠΎΡΠΊΡΠΈΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°. ΠΠ΅ΡΠ΅ΠΊΡΠΎΡΡΡ Π΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ ΠΊΠ°ΡΠΎ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ ΠΈ Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π° Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π°.
GWPSan Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ΅ΠΌΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠ°ΠΌΠΊΠ°ΡΠ° DynamoRIO Π·Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΈΡ ΠΊΠΎΠ΄ Π² Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ISA, ΠΊΠΎΠΈΡΠΎ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π΅ΠΉΠΌΡΠ»ΡΡΠΈΡ. Π§ΡΠ΅Π· ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΈ ΡΠΈΠ³Π½Π°Π»ΠΈ ΠΎΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΈ Π²ΡΡΠΊΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠ°ΡΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π·Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ. ΠΡΠΈ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ Π·Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π΄ΠΎΡΡΡΠΏΠ²Π°Ρ ΠΏΠ°ΠΌΠ΅Ρ, ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ Π½Π° ΡΡΡΡΠ΅Π·Π°ΡΠ΅Π»Π½ΠΈ ΡΡΡΡΠΎΡΠ½ΠΈΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
