Fil-C β€” ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Π·Π° Π΅Π·ΠΈΡ†ΠΈ C ΠΈ C++, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Ρ‰ бСзопасна Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°

Π€ΠΈΠ»ΠΈΠΏ Пизло (Filip Pizlo) прСдстави Π½Π° конфСрСнцията SPLASH’24 ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Π½Π° C/C++ Fil-C, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ΠΈ ΠΎΡ‚ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π΅ насочСн към осигуряванС Π½Π° пълна ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ ΠΊΠΎΠ΄ Π½Π° C ΠΈ C++ – Π·Π° бСзопасна Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ просто Π΄Π° сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡΡ‚ ΠΊΠΎΠ΄. ΠšΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π΅ построСн с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° LLVM ΠΈ сС разпространява ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° Apache 2.0. Runtime сС прСдоставя ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° BSD. Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ наскоро анонсирания ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ TrapC, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π² Π΅Ρ‚Π°ΠΏ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Fil-C Π²Π΅Ρ‡Π΅ Π΅ Π³ΠΎΡ‚ΠΎΠ² Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ ΠΊΠΎΠ΄.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΏΡ€Π΅Π΄Π»Π°Π³Π° бСзопасни вСрсии Π½Π° стандартнитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° C (libc) ΠΈ C++ (libc++), Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Musl ΠΈ LLVM libc++. Π‘Ρ€Π΅Π΄ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ многопоточност, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° сигнали, ΠΌΠ°ΠΏΠΈΡ€Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° (mmap), longjmp/setjmp ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² C++. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Fil-C ΠΌΠΎΠ³Π°Ρ‚ Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π΄Π° сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ bzip2, zip, pcre ΠΈ ncurses. Π‘ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° OpenSSH, OpenSSL, CPython, SQLite, Lua, Curl, Lynx, jpeg6b, zsh, xzutils ΠΈ simdutf.

Π—Π°Ρ‰ΠΈΡ‚Π°Ρ‚Π° ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° сС осигурява Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° 128-Π±ΠΈΡ‚ΠΎΠ²ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ MonoCaps с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ ΠΈ прослСдяванС Π½Π° Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Π±ΡƒΡ„Π΅Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° сборщика Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ FUGC, ΠΊΠΎΠΉΡ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° всички ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ освобоТдаванС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. Π’ случай Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ сС ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅ позволява Сксплоатацията Π½Π° възмоТни уязвимости.

ЗаявСно Π΅, Ρ‡Π΅ комбинацията ΠΎΡ‚ MonoCaps ΠΈ FUGC позволява ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° всички Π³Ρ€Π΅ΡˆΠΊΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ извън Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Π±ΡƒΡ„Π΅Ρ€Π° Π² стСка ΠΈ ΠΊΡƒΠΏΠ°, Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π²Π΅Ρ‡Π΅ освободСна ΠΏΠ°ΠΌΠ΅Ρ‚, ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΡ Π½Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π½Π΅ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ (Type Confusion) Π² контСкста Π½Π° прСсичанСто Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡ€ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ (linking) ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° va_lists. ОсвСн Ρ‚ΠΎΠ²Π°, Fil-C Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ провСрява Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅ ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π² Π±ΡƒΡ„Π΅Ρ€ΠΈΡ‚Π΅, ΠΏΡ€Π΅Π΄Π°Π²Π°Π½ΠΈ ΠΏΡ€ΠΈ систСмни извиквания.

Π¦Π΅Π½Π°Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Fil-C Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π° Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Π±Π΅Π· нСобходимост ΠΎΡ‚ прСнаписванС Π½Π° ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° спСциални Π΅Π·ΠΈΠΊΠΎΠ²ΠΈ конструкции, Π΅ намаляванС Π½Π° производитСлността. Π’ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π½Π° настоящото Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅, ΡΡŠΠ±Ρ€Π°Π½ΠΈ Π² Fil-C, са с ΠΎΠΊΠΎΠ»ΠΎ 1.5-5 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±Π°Π²Π½ΠΈ Π² сравнСниС с ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ с ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ. ΠŸΠ»Π°Π½ΠΈΡ€Π° сС оптимизация ΠΈ сС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°, Ρ‡Π΅ слСд Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π·ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°, Π² ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ случаи ΠΊΠΎΠ΄ΡŠΡ‚ Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ с 1.2 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ, Π° Π² Π½Π°ΠΉ-Π»ΠΎΡˆΠΈΡ‚Π΅ сцСнарии забавянСто няма Π΄Π° надвиши 1.5 ΠΏΡŠΡ‚ΠΈ. ΠšΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° СдинствСно ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Linux Π½Π° систСми X86_64. ΠŸΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈ вСрсии ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ…Π° macOS ΠΈ FreeBSD, Π½ΠΎ слСд Ρ‚ΠΎΠ²Π° бСшС Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄Π° Π½Π΅ сС разпилява усилията ΠΈ ΠΏΡŠΡ€Π²ΠΎ Π΄Π° сС ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈ качСствСн ΠΏΠΎΡ€Ρ‚ Π½Π° libc Π·Π° Π΅Π΄Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°.

Π”Ρ€ΡƒΠ³ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Fil-C Π΅ принципният ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ Π½Π° Π½ΠΈΠ²ΠΎ ABI Π·Π° ΠΊΠΎΠ΄ Π½Π° C/C++, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅ позволява ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΠ±Ρ€Π°Π½ΠΈΡ Π² Fil-C ΠΊΠΎΠ΄ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΡΡŠΠ±Ρ€Π°Π½ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π½Π°Ρ‡ΠΈΠ½ΡŠΡ‚ Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π² Fil-C сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ ΠΎΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ Π»ΠΈΠ½ΠΊΠ΅Ρ€ΠΈ. Π’Π°ΠΊΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ сС обяснява с Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΏΡ€ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с Π½Π΅Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ ΠΊΠΎΠ΄ сС Π³ΡƒΠ±ΠΈ ΡΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π½Π°Ρ‚Π° ΠΎΡ‚ Fil-C Π·Π°Ρ‰ΠΈΡ‚Π° ΠΈ сС създава илюзия Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° ABI ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π±ΠΈΡ…Π° ΠΈΠΌΠ°Π»ΠΈ ΠΏΠΎΠ΄Ρ‚ΠΈΠΊ Π΄Π° ΡΡŠΠΈΠ·Π΄Π°Π²Π°Ρ‚ Π² Fil-C само ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π±Π΅Π· Π΄Π° си ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ трудности с ΠΏΠΎΡ€Ρ‚ΠΈΡ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° цСлия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ MonoCap, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² Fil-C, сС основава Π½Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° 16-Π±Π°ΠΉΡ‚ΠΎΠ²ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, Π² ΠΊΠΎΠΈΡ‚ΠΎ освСн адрСса Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, сС ΡƒΠΊΠ°Π·Π²Π° ΠΈ рСфСрСнция към ΠΎΠ±Π΅ΠΊΡ‚, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ информация Π·Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ (capability), ΠΊΠ°Ρ‚ΠΎ Π³ΠΎΡ€Π½ΠΈ ΠΈ Π΄ΠΎΠ»Π½ΠΈ Π³Ρ€Π°Π½ΠΈΡ†ΠΈ Π½Π° Π±ΡƒΡ„Π΅Ρ€Π°, асоцииран с указатСля, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΈ масив, опрСдСлящ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½ΠΈ Π² всСки Π±Π»ΠΎΠΊ ΠΏΠ°ΠΌΠ΅Ρ‚ (1 Π±Π°ΠΉΡ‚ с информация Π·Π° Ρ‚ΠΈΠΏΠ° (unset, int, ptr, free) Π·Π° всСки 16-Π±Π°ΠΉΡ‚ΠΎΠ² Π±Π»ΠΎΠΊ ΠΏΠ°ΠΌΠ΅Ρ‚). ΠŸΡ€ΠΈ всяко ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ към ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Ρ‡Ρ€Π΅Π· указатСля сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π³Ρ€Π°Π½ΠΈΡ†ΠΈ ΠΈ Ρ‚ΠΈΠΏ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΏΠ°ΠΌΠ΅Ρ‚ с Ρ‚ΠΈΠΏ β€žptrβ€œ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС записват Π΄Π°Π½Π½ΠΈ с Ρ‚ΠΈΠΏ β€žintβ€œ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ).

Всички ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ задСлянС ΠΈ освобоТдаванС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ ΠΎΡ‚ сборщика Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ FUGC (Fil’s Unbelievable Garbage Collector), ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈ освобоТдаванС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΏΡ€Π΅Π²Π΅ΠΆΠ΄Π° всички ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с освобоТдавания Π±ΡƒΡ„Π΅Ρ€ записи Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π² стойност "free" ΠΈ слСд Ρ‚ΠΎΠ²Π° прСнасочва всички ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ към освободСнитС ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΎΠ±Π΅ΠΊΡ‚, сигнализиращ, Ρ‡Π΅ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π²Π΅Ρ‡Π΅ Π΅ освободСна. Всяко ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½ΠΎ ΠΎΠ±Ρ€ΡŠΡ‰Π΅Π½ΠΈΠ΅ към Π±Π»ΠΎΠΊ Π΄Π°Π½Π½ΠΈ с Ρ‚ΠΈΠΏ "free" ΠΈΠ»ΠΈ Ρ‡Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π», ΡΠ²ΡŠΡ€Π·Π°Π½ с освободСния ΠΎΠ±Π΅ΠΊΡ‚, Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΠΌΠ°Π³Π° Π·Π° Π·Π°Ρ‰ΠΈΡ‚Π° срСщу уязвимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° use-after-free. Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊΡŠΡ‚ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΈ Π½Π΅ спира ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ нишки.

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° комбинация ΠΎΡ‚ MonoCaps ΠΈ FUGC позволява Π΄Π° сС Π·Π°ΠΏΠ°Π·ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ Π΄Π° сС остави Π½Π΅ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½Π° сСмантиката Π½Π° повикванията malloc ΠΈ free, прСдоставяйки Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π°. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ логичСски Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΊΠ°Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, Π½Π΅Π²Π΅Ρ€Π½ΠΈ Π°Ρ€ΠΈΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‡Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΡΡŠΡΡ‚Π΅Π·Π°Ρ‚Π΅Π»Π½ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΡ ΠΈ нСсвоСврСмСнСн ΠΏΠΎΠ²ΠΈΠΊ Π½Π° функцията free(), Π½ΠΎ нСзависимо ΠΎΡ‚ всичко Ρ‚ΠΎΠ²Π°, Fil-C запомня основнитС Π³Ρ€Π°Π½ΠΈΡ†ΠΈ ΠΈ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½ΠΈ ΠΈ прСкратява ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π°ΠΊΠΎ бъдС Π½Π°ΠΏΡ€Π°Π²Π΅Π½Π° ΠΎΠΏΠΈΡ‚ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π» Π΄ΠΎ област извън Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½ΠΈΡ‚Π΅ Π³Ρ€Π°Π½ΠΈΡ†ΠΈ, адрСсиранС Π½Π° освободСн Π±Π»ΠΎΠΊ ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ с Ρ‚ΠΈΠΏ "int" ΠΊΠ°Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π» ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.

ΠΠ²Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π° Fil-C, Π€ΠΈΠ»ΠΈΠΏ Пизло, Π·Π°Π΅ΠΌΠ° Π² компанията Epic Games поста Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€, отговарящ Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΈ Π΅Π·ΠΈΡ†ΠΈ. Π€ΠΈΠ»ΠΈΠΏ ΠΈΠΌΠ° Π±ΠΎΠ³Π°Ρ‚ ΠΎΠΏΠΈΡ‚ Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π²ΡŠΡ€Ρ…Ρƒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΈ Π΅Π·ΠΈΡ†ΠΈ, ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ сборщики Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² IBM Ρ‚ΠΎΠΉ Ρ€Π°Π·Π²ΠΈΠ²Π° програмния Π΅Π·ΠΈΠΊ X10, Π² Microsoft Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ сборщики Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ Stopless, Clover ΠΈ Chicken, Π² Apple Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈΠ» ΠΏΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π½ΠΈΡ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π» WebKit, Π° Π² Epic Games Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΠΈ Π΅ΠΊΠΈΠΏΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‰ΠΈ програмния Π΅Π·ΠΈΠΊ Verse ΠΈ ΡΠ²ΡŠΡ€Π·Π°Π½Π°Ρ‚Π° с Π½Π΅Π³ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина. Π€ΠΈΠ»ΠΈΠΏ ΡΡŠΡ‰ΠΎ Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини Jikes RVM, Ovm ΠΈ Fiji VM.

ΠŸΡƒΡΠ½Π΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎΡ‚ΠΎ


Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru
ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster