Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΠ. Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΎΠΆΠ΅Π»Π°Π½ΠΈΡ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ: ΠΡΠΆΠ½Π° ΠΏΠΎΠΌΠΎΡΡ Π² ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠΈ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Π·Π°Π΄Π°Ρ ΠΏΠΎ ΡΡΠ°ΡΠΈΠΊΠ΅ ΠΈ ΡΠ°Π·Π·ΠΈΠ½Π³Ρ. ΠΡΠΈΠΌΠ΅Ρ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ ΡΡΠ°ΡΠΈΠΊΠ΅: Π§Π°ΡΡΡ 3. Svace ΠΈ CVE-[Π’Π΅Π»Π΅ΡΠΎΠ½ ΡΠΊΡΡΡ] Svace - ΡΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ ΠΠ‘Π Π ΠΠ. ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π°Π½Π°Π»ΠΈΠ·Π° (Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ svace analyze) ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ΅Π½Π½Π°Ρ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Svace, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ½Π΅ΠΏΡΠΎΡ. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡ CVE-[Π’Π΅Π»Π΅ΡΠΎΠ½ ΡΠΊΡΡΡ] Π±ΡΠ»Π° ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π° Π² GPAC - ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠ΅Π΄ΠΈΠ°ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ. ΠΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π΄Π°Π½Π½ΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ
ΡΠ°Π½Π΅Π΅ cppcheck ΠΈ clang static analyzer Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π΅Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Svace. Π Ρ
ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Π½ΠΈΠΉ 3 ΡΠ°ΡΡΠΈ Ρ Π½Π°Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ ΡΠ°Π±ΠΎΡΡ: ΡΠΊΡΠΈΠ½ΡΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠ½ΠΊΡΠΎΠ² Π·Π°Π΄Π°Π½ΠΈΡ .svace-dir, ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠ°ΡΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ svace build ΡΠ°ΠΉΠ», ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ git format-patch ΠΏΠ°ΡΡ, ΠΈΡΠΏΡΠ°Π»ΡΡΡΠΈΠΉ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Svace Π‘ΠΊΠ°ΡΠ°Π΅ΠΌ ΠΈ ΡΠ°ΡΠΏΠ°ΠΊΡΠ΅ΠΌ Π°ΡΡ
ΠΈΠ² ΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠΌ Svace curl -LJ -o svace.tar.bz2 'https://nextcloud.ispras.ru/public.php/dav/files/pB8sn5a2bp6BjLP/Svace/svace-4.0.250829-x64-linux.tar.bz2' tar -xjf svace.tar.bz2 Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊ Π² PATH, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ svace Π±Π΅Π· ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΏΡΡΠΈ ln -s ~/svace-4.0.250829-x64-linux/bin/svace /usr/local/bin/svace Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Svacer Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ Svacer ΠΈΠ· ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ RPM-ΠΏΠ°ΠΊΠ΅ΡΠ° curl -LJ -o svacer-11.2-0.x86_64.rpm 'https://nextcloud.ispras.ru/public.php/dav/files/pB8sn5a2bp6BjLP/Svace/Svacer/svacer-11.2-0.x86_64.rpm' sudo apt-get install ./svacer-11.2-0.x86_64.rpm Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ postgresql Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ: sudo apt-get install postgresql16-server postgresql16-contrib ΠΠ½ΠΈΡΠΈΠΈΡΡΠ΅ΠΌ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
postgresql ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ΅ΡΠ²ΠΈΡ (ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ root) /etc/init.d/postgresql initdb systemctl start postgresql ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΡΠΈΠ»ΠΈΡΠΊΡ psql ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ postgres: psql -U postgres ΠΠ½ΡΡΡΠΈ psql ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΠ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ svacer: postgres=# create database svace; postgres=# create user svace with encrypted password 'svace'; postgres=# grant all privileges on database svace to svace; postgres=# alter user svace superuser; postgres=# CREATE EXTENSION IF NOT EXISTS btree_gin; ΠΠ»Ρ Π²ΡΡ
ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Ctrl+D ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Svacer, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΠΏΠΎΡΡΡ 8081: svacer-server run --port 8081 ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π΄Π°Π»ΡΠ½Π΅ΠΉΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° GPAC ΠΠ»ΠΎΠ½ΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ GPAC git clone Π‘Π°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎΠ± ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ CVE-[Π’Π΅Π»Π΅ΡΠΎΠ½ ΡΠΊΡΡΡ] ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ·Π²ΠΈΠΌΡΡ Π²Π΅ΡΡΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ Π½Π° Π½Π΅Ρ. Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ./configure --static-mp4box --use-zlib=no ΠΠ½ΠΈΡΠΈΠΈΡΡΠ΅ΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ .svace-dir, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°: svace init ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ±ΠΎΡΠΊΡ (make) ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΠΌ Svace: svace build make ΠΠ° ΡΡΠΎΠΌ ΡΠ°Π³Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Π°Ρ .svace-dir, Π½ΠΎ ΠΏΠΎ Π½Π΅ΠΉ Π½Π΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ Π°Π½Π°Π»ΠΈΠ·. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» Π±ΡΡΡ Π·Π°ΠΏΡΡΠΊ Π°Π½Π°Π»ΠΈΠ·Π° Svace, Π½ΠΎ Π½Π° ΡΡΠΎΠΌ ΡΠ°Π³Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ, Π° Π΅Π΅ Ρ Π½Π°Ρ Π½Π΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π° Π΄Π°Π»ΡΡΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ½Π΅ΠΏΡΠΎΡ: Π Π°Π·Π±ΠΎΡ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΠΉ ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π‘Π»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΡ ΡΠΎΠΆΠ΅ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈΠ·-Π·Π° ΠΎΡΡΡΡΡΠ²ΠΈΡ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ: Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http://127.0.0.1:8081 ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ Svacer Ρ Π»ΠΎΠ³ΠΈΠ½ΠΎΠΌ ΠΈ ΠΏΠ°ΡΠΎΠ»Π΅ΠΌ admin:admin ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΡΠ½Π΅ΠΏΡΠΎΡ - gpac.snap. ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΡΠ½Π΅ΠΏΡΠΎΡΠΎΠ² ΡΠ΅ΡΠ΅Π· ΠΡΠΎΠ΅ΠΊΡΡ -> ΠΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ -> ΠΠΌΠΏΠΎΡΡ -> ΡΠ½ΠΈΠΌΠΎΠΊ (*.snap) Π‘Π°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎΠ± ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ CVE-[Π’Π΅Π»Π΅ΡΠΎΠ½ ΡΠΊΡΡΡ] Π½Π°ΠΉΠ΄ΠΈΡΠ΅ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ, ΡΡΠ°Π±ΠΎΡΠ°Π²ΡΠΈΠΉ Π½Π° ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ ΠΎΡΠΈΠ±ΠΊΡ. ΠΠ»Ρ ΡΡΠΎΠΉ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ PoC-ΡΠ°ΠΉΠ», ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ Ρ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ: gpac/bin/gcc/MP4Box -add poc.nhml -new new.mp4 Π‘Π°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎΠ± ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ CVE-[Π’Π΅Π»Π΅ΡΠΎΠ½ ΡΠΊΡΡΡ] ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΡΡΠ΅ ΠΏΠ°ΡΡ Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ (ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ git cherry-pick Ρ ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΌ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠΌ ΠΈΠ· Π°ΠΏΡΡΡΠΈΠΌΠ°), ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ PoC-ΡΠ°ΠΉΠ» Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅, ΡΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ°Π±ΠΎΡΠΊΡ ΡΠ°Π½Π΅Π΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ°. ΠΡΠΎΠ³ 3 ΡΠ°ΡΡΠΈ Π Ρ
ΠΎΠ΄Π΅ 3 ΡΠ°ΡΡΠΈ ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ Ρ Svace. ΠΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΡΠ·Π²ΠΈΠΌΡΡ ΠΊ CVE-[Π’Π΅Π»Π΅ΡΠΎΠ½ ΡΠΊΡΡΡ] Π²Π΅ΡΡΠΈΡ GPAC, ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°, ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ Π΅Π΅ Π½Π°Π»ΠΈΡΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ PoC-ΡΠ°ΠΉΠ»Π°, ΠΈΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ Π΅Π΅ ΠΈ ΡΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡ Π² ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ: ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΡΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΡΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ
ΡΡΠ΅Π΄ΡΡΠ² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅, ΠΏΠΎΡΠ΅ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ/Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ. ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎ ΡΠ°Π·Π·ΠΈΠ½Π³Ρ: Π§Π°ΡΡΡ 3. ΠΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΡΠΏΡΡΠ° ΠΈ ΡΠ±ΠΎΡ ΠΏΠΎΠΊΡΡΡΠΈΡ Π Ρ
ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ: ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΡΠΏΡΡ ΠΈΠ· ΡΠ°ΡΡΠΈ 2 ΠΈ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΡΡΠ°Π²ΡΠΈΡ
ΡΡ Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²; ΡΠΎΠ±ΡΠ°ΡΡ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΠΊΠΎΠ΄Π°, Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΠΌΠΎΠ΅ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ Π½Π°ΠΌΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠ΅ΠΉ ΡΠ°Π·Π·ΠΈΠ½Π³Π° Π Ρ
ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Π½ΠΈΠΉ 3 ΡΠ°ΡΡΠΈ Ρ Π½Π°Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ ΡΠ°Π±ΠΎΡΡ: ΡΠΊΡΠΈΠ½ΡΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠ½ΠΊΡΠΎΠ² Π·Π°Π΄Π°Π½ΠΈΡ; ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΡΠΏΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΈΠ· ΡΠ°ΡΡΠΈ 2; ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ HTML-ΠΎΡΡΠ΅Ρ Ρ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΠ· ΡΠ°ΡΡΠΈ 2. ΠΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΡΠΏΡΡΠ° Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΡΠΏΡΡΠ°, Π½Π΅ ΠΎΡΠΊΡΡΠ²Π°ΡΡΠΈΡ
Π½ΠΎΠ²ΡΠ΅ ΠΏΡΡΠΈ Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΡΠΏΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠΈΠ»ΠΈΡΠ° afl-cmin ΠΡΠΎΠ²Π΅ΡΠΈΠΌ Π½Π° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΡΠΏΡΡ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ Π² Ρ
ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΈ 2: afl-cmin -i input -o input-unique -- ./program [...program's cmdline...]@@ΠΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΡΠΏΡΡΠ° ΠΠ»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΡΠΏΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠΈΠ»ΠΈΡΠ° afl-tmin, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ
Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π³Π΅ ΡΠ°ΠΉΠ»ΠΎΠ² (Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ cppcheck ΠΈΠ· ΡΠ°ΡΡΠΈ 2): afl-tmin -i input-unique/1.cpp -o input/1.cpp.min -- ./bin/cppcheck @@ Π‘Π°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ Π½Π° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Π²Π°ΠΌΠΈ Π² ΡΠ°ΡΡΠΈ 2 ΠΊΠΎΡΠΏΡΡ ΠΈΠ· 3 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ ΡΠΌΠ΅Π½ΡΡΠΈΡΠ΅ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΡΡΠ°Π²ΡΠΈΡ
ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². Π‘Π±ΠΎΡ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΠ»Ρ ΡΠ±ΠΎΡΠ° ΠΏΠΎΠΊΡΡΡΠΈΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠ±ΠΎΡΠ° ΠΏΠΎΠΊΡΡΡΠΈΡ, Π²Ρ
ΠΎΠ΄ΡΡΠΈΠΌΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡ llvm: https://clang.llvm.org/docs/SourceBasedCodeCoverage.html Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ cppcheck Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΡΠ°ΡΡ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌΡΠΉ Π² ΡΠ°ΡΡΠΈ 2 ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ Π΄Π»Ρ ΡΠ±ΠΎΡΠ° ΠΏΠΎΠΊΡΡΡΠΈΡ: CFLAGS=“-fprofile-instr-generate -fcoverage-mapping“ CXXFLAGS=“-fprofile-instr-generate -fcoverage-mapping“ CC=clang CXX=clang++ cmake . CFLAGS=“-fprofile-instr-generate -fcoverage-mapping“ CXXFLAGS=“-fprofile-instr-generate -fcoverage-mapping“ CC=clang CXX=clang++ make ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅ΡΡΠΎ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ
ΡΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠ° ΠΏΠΎΠΊΡΡΡΠΈΡ: mkdir cov cd cov export LLVM_PROFILE_FILE=“$(pwd)/cppcheck.profraw“ ΠΠ°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΈΡΡΠ»Π΅Π΄ΡΠΌΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄Π°Π²Π°Ρ Π½Π° Π²Ρ
ΠΎΠ΄ Π²ΡΠ΅ Π½Π°ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ Π² Ρ
ΠΎΠ΄Π΅ 5-ΠΌΠΈΠ½ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π·ΠΈΠ½Π³-ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Ρ: ./bin/cppcheck $(find “output/default/queue“ -type f) 2>&1 > /dev/null ΠΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΎΡΠΈΠ»Ρ: llvm-profdata merge -sparse cov/cppcheck.profraw -o cov/cppcheck.profdata ΠΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠΎΡΠΌΠ°Ρ lcov: llvm-cov export -format=lcov -instr-profile=cov/cppcheck.profdata ./bin/cppcheck > cov/cppcheck.lcov Π‘Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ HTML-ΠΎΡΡΠ΅Ρ genhtml cov/cppcheck.lcov -o cov/html ΠΡΠΎΠ³ 3 ΡΠ°ΡΡΠΈ Π Ρ
ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ 3 ΡΠ°ΡΡΠΈ ΠΌΡ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΡΠΏΡΡ ΠΈ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΠΊΠΎΠ΄Π°.