مثال ها

بررسی اجمالی

ما چند نمونه برای کمک به شما برای پیاده سازی اولین کتابخانه Sandboxed API آماده کرده ایم.

می توانید آنها را در //sandboxed_api/examples بیابید، برای توضیحات دقیق به زیر مراجعه کنید.

سلام_ساپی

این یک مثال بسیار اساسی است که نحوه کار SAPI را نشان می دهد. hello_lib.cc یک تابع، AddTwoIntegers() را پیاده‌سازی می‌کند که جعبه‌بندی می‌شود و در کد میزبان فراخوانی می‌شود.

دومین فایل کد میزبان، hello_transacted.cc ، نمونه ای از استفاده از تراکنش های SAPI را نشان می دهد.

مجموع

یک کتابخانه آزمایشی که چند تابع C و یک تابع C++ را پیاده سازی می کند. از پروتوباف ها برای تبادل داده بین کد میزبان و کتابخانه SAPI استفاده می کند.

  • تعریف sandbox را می توان در فایل sandbox.h یافت.
  • فایل حاشیه نویسی تابع (به طور خودکار تولید می شود) (فایلی که نمونه های اولیه توابع sandboxed را ارائه می دهد) را می توان بعد از ساخت Bazel در bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h یافت.
  • منطق اجرای واقعی (معروف به کد میزبان) که از رویه‌های جعبه ایمنی صادر شده استفاده می‌کند را می‌توان در main_sum.cc یافت.

zlib

این یک پیاده سازی آزمایشی (عملکردی، اما در حال حاضر در تولید استفاده نمی شود) برای کتابخانه zlib است، برخی از توابع آن را صادر می کند و آنها را در دسترس کد میزبان قرار می دهد.

عملکرد نشان داده شده کد میزبان رمزگشایی جریان های zlib از stdin به stdout است.

این کتابخانه SAPI از فایل sandbox.h استفاده نمی کند، زیرا از خط مشی پیش فرض Sandbox2 و یک کتابخانه SAPI جاسازی شده استفاده می کند، بنابراین نیازی به ارائه sapi::Sandbox::GetLibPath() یا sapi::Sandbox::GetPolicy() نیست. sapi::Sandbox::GetPolicy() .

zlib SAPI را می توان در //sapi_sandbox/examples/zlib به همراه کد میزبان آن یافت.

رشته

این مثال استفاده از پروتوباف ها را برای ارائه یک تابع reverse و duplication نشان می دهد. این کتابخانه همچنین دارای یک sandbox.h اختصاصی برای ارائه یک خط مشی Sandbox سختگیرانه است.

کد میزبان یک برنامه "عادی" را نشان نمی دهد، در عوض عملکرد کتابخانه SAPI را با استفاده از تست های واحد نشان می دهد.

در این مثال، توابع مبتنی بر غیر پروتوباف نیز برای مقایسه بین این دو رویکرد گنجانده شده است.