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