概要

最初のサンドボックス化された API ライブラリを実装する際に役立つ例をいくつか用意しました。

これらは //sandboxed_api/examples にあります。詳細については、以下をご覧ください。

hello_sapi

これは、SAPI の仕組みを示すごく基本的な例です。hello_lib.cc は、ホストコードでサンドボックス化されて呼び出される 1 つの関数 AddTwoIntegers() を実装します。

2 つ目のホストコード ファイル hello_transacted.cc は、SAPI トランザクションの使用例を示しています。

合計

いくつかの C 関数と 1 つの C++ 関数を実装するデモ ライブラリ。protobuf を使用して、ホストコードと SAPI ライブラリの間でデータを交換します。

  • サンドボックスの定義は sandbox.h ファイルにあります。
  • (自動生成された)関数アノテーション ファイル(サンドボックス化された関数のプロトタイプを提供するファイル)は、Bazel ビルド後に bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h にあります。
  • エクスポートされたサンドボックス化されたプロシージャを使用する実際の実行ロジック(ホストコード)は、main_sum.cc にあります。

zlib

これは、zlib ライブラリのデモ実装(機能はするが、現在は本番環境で使用されていない)で、その関数の一部をエクスポートして、ホストコードで使用できるようにします。

ホストコードのデモ機能は、stdin から stdout への zlib ストリームのデコードです。

この SAPI ライブラリは、デフォルトの Sandbox2 ポリシーと埋め込み SAPI ライブラリを使用するため、sandbox.h ファイルを使用しません。そのため、sapi::Sandbox::GetLibPath() メソッドや sapi::Sandbox::GetPolicy() メソッドを提供する必要はありません。

zlib SAPI は //sapi_sandbox/examples/zlib にあり、ホストコードも含まれています。

stringop

この例では、protobuf を使用して文字列の reverse 関数と duplication 関数を提供する方法を示します。このライブラリには、より厳格なサンドボックス ポリシーを提供する専用の sandbox.h も含まれています。

ホストコードは「通常の」プログラムを表すものではなく、単体テストを使用して SAPI ライブラリの機能を示しています。

この例では、2 つのアプローチを比較するために、protobuf ベース以外の関数も含まれています。