الأمثلة

نظرة عامة

لقد أعددنا بعض الأمثلة لمساعدتك في تنفيذ مكتبة Sandboxed API الأولى.

يمكنك العثور عليها في //sandboxed_api/examples، راجِع ما يلي للاطّلاع على الشروحات التفصيلية.

hello_sapi

هذا مثال أساسي جدًا يوضّح طريقة عمل SAPI. يحتوي الملف hello_lib.cc على دالة واحدة، AddTwoIntegers()، سيتم تشغيلها في وضع الحماية واستدعاؤها في رمز المضيف.

يوضّح ملف رمز المضيف الثاني، hello_transacted.cc، مثالاً على استخدام معاملات SAPI.

المجموع

مكتبة تجريبية تنفّذ بعض وظائف C ووظيفة C++ واحدة. يستخدم هذا التطبيق بروتوكولات protobuf لتبادل البيانات بين "رمز المضيف" و"مكتبة SAPI".

  • يمكن العثور على تعريف وضع الحماية في الملف sandbox.h.
  • يمكن العثور على ملف شرح الدالة (الذي يتم إنشاؤه تلقائيًا) (وهو ملف يوفّر نماذج أولية للدوال المحصورة في بيئة الاختبار المعزولة) في bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h بعد إنشاء Bazel.
  • يمكن العثور على منطق التنفيذ الفعلي (المعروف أيضًا باسم رمز المضيف) الذي يستخدم الإجراءات المحمية التي تم تصديرها في main_sum.cc.

zlib

هذا هو تنفيذ تجريبي (يعمل، ولكن لا يتم استخدامه حاليًا في الإنتاج) لمكتبة zlib، حيث يتم تصدير بعض وظائفها وإتاحتها لرمز المضيف.

تتمثّل الوظيفة التي تم توضيحها لرمز المضيف في فك ترميز تدفقات zlib من stdin إلى stdout.

لا تستخدم مكتبة SAPI هذه الملف sandbox.h، لأنّها تستخدم سياسة Sandbox2 التلقائية ومكتبة SAPI مضمّنة، لذلك لا حاجة إلى توفير الطريقتَين sapi::Sandbox::GetLibPath() أو sapi::Sandbox::GetPolicy().

يمكن العثور على واجهة برمجة التطبيقات zlib SAPI في //sapi_sandbox/examples/zlib، بالإضافة إلى رمز المضيف.

stringop

يوضّح هذا المثال كيفية استخدام بروتوكولات protobuf لتوفير السلسلة reverse والدالة duplication. تحتوي المكتبة أيضًا على sandbox.h مخصّص لتوفير سياسة أكثر صرامة في "البيئة التجريبية".

لا يمثّل رمز المضيف برنامجًا "عاديًا"، بل يوضّح وظائف مكتبة SAPI باستخدام اختبارات الوحدات.

في هذا المثال، يتم تضمين الدوال غير المستندة إلى بروتوكول Buffer أيضًا لتقديم مقارنة بين الطريقتين.