示例

概览

我们准备了一些示例,可帮助您实现第一个沙盒化 API 库。

您可以在 //sandboxed_api/examples 中找到这些示例,详细说明如下。

hello_sapi

这是一个非常基本的示例,用于说明 SAPI 的工作方式。hello_lib.cc 实现了一个函数 AddTwoIntegers(),该函数将在 宿主代码中进行沙盒化处理和调用。

第二个宿主代码文件 hello_transacted.cc 演示了 SAPI 事务的用法示例。

总和

一个实现了一些 C 函数和一个 C++ 函数的演示库。它使用 protobuf 在宿主代码和 SAPI 库之间交换数据。

  • 沙盒定义可在 sandbox.h 文件中找到。
  • 在 Bazel 构建后,您可以在 bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h 中找到(自动生成的)函数注释文件(提供沙盒函数原型的文件)。
  • 使用导出的沙盒过程的实际执行逻辑(也称为宿主代码)可在 main_sum.cc 中找到。

zlib

这是 zlib 库的演示实现(功能正常,但目前未在生产环境中使用),它导出了一些函数并使其可供宿主代码使用。

主机代码演示的功能是将来自 stdin 的 zlib 流解码到 stdout。

此 SAPI 库不使用 sandbox.h 文件,因为它使用默认的 Sandbox2 政策和嵌入式 SAPI 库,因此无需提供 sapi::Sandbox::GetLibPath()sapi::Sandbox::GetPolicy() 方法。

zlib SAPI 位于 //sapi_sandbox/examples/zlib 中,同时还包含其宿主代码

stringop

此示例演示了如何使用 protobuf 提供字符串 reverseduplication 函数。该还包含一个专用 sandbox.h,以提供更严格的沙盒政策。

宿主代码不代表“正常”程序,而是通过单元测试演示 SAPI 库的功能。

在此示例中,还包含基于非 protobuf 的函数,以便比较这两种方法。