Fil-CΒ β€” компилятор для языков C ΠΈ C++, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ

ЦСль Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ компилятора – полная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с синтаксисом языков Π‘ΠΈ ΠΈ Π‘++ ΠΏΡ€ΠΈ обСспСчСнии ΠΏΠΎΠ»Π½ΠΎΠΉ бСзопасности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. ЗаявляСтся, Ρ‡Ρ‚ΠΎ для использования достаточно ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, Ρ‚Π°ΠΊ ΡƒΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ bzip2, zip, pcre ΠΈ ncurses. Π‘ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ модификациями поддСрТиваСтся сборка OpenSSH, OpenSSL, CPython, SQLite, Lua, Curl, Lynx, jpeg6b, zsh, xzutils ΠΈ simdutf.

Π—Π°Ρ‰ΠΈΡ‚Π° обСспСчиваСтся благодаря ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ 128-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ сборщика мусора. Если Π·Π°Ρ‰ΠΈΡ‚Π° отслСТиваСт ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ позволяСт Π½Π΅ ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ.

ЗаявляСтся отслСТиваниС Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ: выдСлСния ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ освобоТдСния памяти Π² стСкС ΠΈ ΠΊΡƒΡ‡Π΅, отслСТиваниС Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ состояниС Π³ΠΎΠ½ΠΊΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с указатСлям.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² 1,5-5 Ρ€Π°Π· большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ Ρƒ gcc. Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния Π² 1.2 Ρ€Π°Π·Π° Π½ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, скомпилированных gcc. Пока компилятор доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для linux-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ принято Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ€Π°ΡΠΏΡ‹Π»ΡΡ‚ΡŒ усилия. Π›ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ° с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, созданным Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ компиляторами, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π² силу Ρ€Π°Π·Π½ΠΎΠ³ΠΎ ABI.

ЗадСйствованный Π² Fil-C ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ MonoCap основываСтся Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ 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, Π€ΠΈΠ»ΠΈΠΏΠΏ Пизло (Filip Pizlo), Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Epic Games пост Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€Π°, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, связанныС с языками программирования. Π€ΠΈΠ»ΠΈΠΏΠΏ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ машинами, языками программирования, компиляторами ΠΈ сборщиками мусора, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² IBM ΠΎΠ½ Ρ€Π°Π·Π²ΠΈΠ²Π°Π» язык программирования X10, Π² Microsoft Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½Π°Π΄ сборщиками мусора Stopless, Clover ΠΈ Chicken, Π² Apple занимался JIT-компилятором ΠΈ оптимизациями Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ° WebKit, Π² Epic Games возглавляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ язык программирования Verse ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с Π½ΠΈΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ. Π€ΠΈΠ»ΠΈΠΏΠΏ Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин Jikes RVM, Ovm ΠΈ Fiji VM.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: linux.org.ru