概要

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

//sandboxed_api/examples で確認できます。詳細な説明については以下をご覧ください。

hello_sapi

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

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

合計

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

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

zlib

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

ホストコードの機能は、zlib ストリームを stdin から stdout にデコードすることです。

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

zlib SAPI は、//sapi_sandbox/examples/zlib とそのホストコードにあります。

ストリングコップ

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

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

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