概要
最初のサンドボックス化された 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 を使用して文字列 reverse
と duplication
の関数を指定する方法を示しています。ライブラリには、より厳格なサンドボックス ポリシーを提供する専用の sandbox.h も含まれています。
ホストコードは「通常の」プログラムを表すものではなく、単体テストを使用して SAPI ライブラリの機能を示すものです。
この例では、2 つのアプローチを比較するために、protobuf 以外の関数も含めています。