العودة إلى التحديثات
New releaseSep 17, 2026

fil-c v0.685

Fil-C: أمان ذاكرة متوافق تمامًا مع C و C++

مشاركة

Fil-C 0.684

Fil-C هو تطبيق متوافق بشكل متعصب وآمن للذاكرة للغة C و C++. يتم ترجمة وتشغيل الكثير من البرامج باستخدام Fil-C بتغييرات صفرية أو بسيطة. يتم اكتشاف جميع أخطاء أمان الذاكرة كحالات ذعر Fil-C. يحقق Fil-C ذلك باستخدام مزيج من جمع القمامة المتزامن والقدرات غير المرئية (كل مؤشر في الذاكرة له قدرة مقابلة، غير مرئية لمساحة عنوان C). يتم التحقق من كل عملية C أساسية (كما تظهر في LLVM IR) مقابل القدرة. لا يحتوي Fil-C على عبارة unsafe وفقط FFI محدود للكود غير الآمن.

Fil-C مميز للأسباب التالية:

  • يحقق Fil-C أمانًا كاملاً بدون منافذ هروب. لا يوجد كلمة unsafe في Fil-C يمكن استخدامها لإيقاف الحمايات. الربط بالكود غير الآمن مقيد بشدة.

  • يحقق نهج Fil-C القائم على القدرات مستوى مشابهًا من الأمان لقدرات الأجهزة مثل CHERI، باستثناء أنه يعمل على أجهزة عادية (X86_64 أو ARM64).

  • تم تصميم Fil-C لمنع استخدام أخطاء أمان الذاكرة للاستغلال بدلاً من مجرد الإشارة إليها في كثير من الأحيان بما يكفي للعثور على الأخطاء. هذا يجعل Fil-C مختلفًا عن AddressSanitizer، أو HWAsan، أو MTE، والتي يمكن للمهاجمين تجاوزها جميعًا. الفرق الرئيسي الذي يجعل هذا ممكنًا هو أن Fil-C قائم على القدرات (لذا كل مؤشر يعرف نطاق الذاكرة التي قد يصل إليها، وكيف يمكنه الوصول إليها) بدلاً من قائم على العلامات (حيث يُسمح بالوصول إلى المؤشرات إذا وصلت إلى ذاكرة صالحة).

  • من وجهة نظر مستخدم اللغة، Fil-C هو مجرد C و C++ مع امتدادات GCC/clang. من المرجح أكثر من لا أن برنامج C أو C++ المفضل لديك أو المكتبة يُترجم في Fil-C بدون تغييرات. يعتمد مترجم Fil-C على clang 20.1.8، لذا يدعم C17 و C++20.

الترخيص

المترجم (clang + LLVM) مشمول بـ LLVM-LICENSE.txt. وقت التشغيل مشمول بـ PAS-LICENSE.txt (انظر libpas/LICENSE.txt في توزيع المصدر). في حالة توزيع Fil-C الكلاسيكي القائم على musl، فإن musl libc مشمول بـ MUSL-LICENSE.txt (انظر projects/yolomusl/COPYRIGHT و projects/usermusl/COPYRIGHT في توزيع المصدر). في حالة توزيع /opt/fil، فإن glibc مشمول بـ glibc-LICENSE.txt، وجميع البرامج الأخرى المضمنة مشمولة بملفات -LICENSE.txt الخاصة بها. مكتبات C++ (libc++/libc++abi) مشمولة بـ LLVM-LICENSE.txt.

يمكنك جلب المصدر للمترجم، ووقت التشغيل، و libc++/libc++abi، و libc (musl و glibc)، وجميع البرامج المضمنة من github. يتضمن توزيع المصدر أيضًا العديد من البرامج الإضافية التي تم نقلها إلى Fil-C في دليل projects/ و pizlix/، ولها مجموعة متنوعة من التراخيص. يتضمن توزيع /opt/fil إصدارات من مجموعة متنوعة من البرامج الإضافية وتراخيصها في additional-licenses/ في ذلك التوزيع.

المتطلبات

يعمل Fil-C فقط على Linux/X86_64 أو Linux/ARM64.

عملت الإصدارات السابقة على Darwin/ARM64 و FreeBSD، لكنني الآن أركز فقط على Linux لأنه يسمح لي بالقيام بعمل أكثر إخلاصًا في تنفيذ libc. لا يوجد شيء يمنع Fil-C من العمل على معماريات أو أنظمة تشغيل أخرى غير Linux.

البدء

إذا قمت بتنزيل ثنائيات Fil-C، فشغّل:

./setup.sh

هذا له تأثير مختلف اعتمادًا على توزيع الثنائيات الذي اخترته:

  • في حالة التوزيع الكلاسيكي القائم على musl (filc-0.684-linux-x86_64.tar.xz أو filc-0.684-linux-aarch64.tar.xz)، فإن هذا يعد Fil-C للعمل في الدليل الحالي.

  • في حالة توزيع /opt/fil القائم على glibc (optfil-0.684-linux-x86_64.tar.xz)، فإن هذا يعد Fil-C في /opt/fil.

إذا قمت بتنزيل مصدر Fil-C، فشغّل:

./build_all_fast.sh

ثم ستتمكن من استخدام Fil-C من داخل هذا الدليل.

يأتي توزيع ثنائيات Fil-C مع musl كـ libc. استخدام ./build_all_fast.sh في توزيع المصدر يبني أيضًا Fil-C باستخدام musl. إذا كنت تستخدم المصدر، فيمكنك أيضًا:

  • ./build_all_fast_glibc.sh - يبني إعدادًا مشابهًا ولكن مع glibc 2.40 كـ libc.

  • ./build_all.sh - بناء كامل قائم على musl (يبني أيضًا الكثير من البرامج التي تم نقلها إلى Fil-C).

  • ./build_all_glibc.sh - بناء كامل قائم على glibc (يبني المزيد من البرامج التي تم نقلها إلى Fil-C).

  • cd pizlix && sudo ./build.sh - يبني توزيع Pizlix Linux.

  • cd optfil && sudo ./build.sh - يبني توزيع /opt/fil.

الأشياء التي تعمل

تعمل الكثير من حزم البرامج في Fil-C بتغييرات صفرية أو بسيطة، بما في ذلك الكبيرة مثل openssl، و CPython، و SQLite، و العديد من الآخرين. Fil-C قوي بما يكفي لدعم بيئة Linux للمستخدم آمنة تمامًا للذاكرة.

لدى Fil-C دعم كامل لـ C و C++ بالإضافة إلى جميع امتدادات clang 20 تقريبًا. لدى Fil-C دعم ممتاز للذرات و SIMD intrinsics، على سبيل المثال.

يلتقط Fil-C كل الأشياء التي تجعل أمان الذاكرة في C صعبًا، مثل:

  • تجاوز الحدود على الكومة أو المكدس.

  • الاستخدام بعد التحرير (أيضًا الكومة أو المكدس).

  • خلط الأنواع بين المؤشرات وغير المؤشرات.

  • أخطاء الأنواع الناشئة عن الربط.

  • أخطاء الأنواع الناشئة عن سوء استخدام va_lists.

  • سباقات المؤشرات.

  • استدعاءات النظام. يتم التحقق من جميع المخازن المؤقتة التي تمرر إلى استدعاءات النظام من حيث الحدود والنوع.

  • الكثير من الأشياء الأخرى.

يأتي Fil-C مع libc POSIX كاملة إلى حد معقول وحتى يدعم ميزات صعبة مثل الخيوط، ومعالجة الإشارات، و mmap/munmap، و longjmp/setjmp، واستثناءات C++.

معرفة المزيد

يمكنك معرفة المزيد عن Fil-C من خلال زيارة الموقع.

يمكنك أيضًا مراسلتي عبر البريد الإلكتروني: [email protected]

تابعني على Twitter.

أبلغ عن المشكلات على GH.

الفئات