概要
最初のサンドボックス化された 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 ベース以外の関数も含まれています。