概览
我们准备了一些示例,可帮助您实现第一个沙盒化 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 提供字符串 reverse
和 duplication
函数。该库还包含一个专用 sandbox.h,以提供更严格的沙盒政策。
宿主代码不代表“正常”程序,而是通过单元测试演示 SAPI 库的功能。
在此示例中,还包含基于非 protobuf 的函数,以便比较这两种方法。