개요

첫 번째 샌드박스 API 라이브러리를 구현하는 데 도움이 되는 몇 가지 예시를 준비했습니다.

//sandboxed_api/examples에서 확인할 수 있습니다. 자세한 설명은 아래를 참고하세요.

hello_sapi

SAPI의 작동 방식을 보여주는 매우 기본적인 예입니다. hello_lib.cc는 샌드박스 처리되고 호스트 코드에서 호출될 AddTwoIntegers() 함수를 구현합니다.

두 번째 호스트 코드 파일인 hello_transacted.ccSAPI 트랜잭션의 사용 예를 보여줍니다.

합계

몇 가지 C 함수와 단일 C++ 함수를 구현하는 데모 라이브러리 호스트 코드와 SAPI 라이브러리 간에 데이터를 교환하는 데 protobuf를 사용합니다.

  • 샌드박스 정의는 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를 사용하여 문자열 reverseduplication 함수를 제공하는 방법을 보여줍니다. 라이브러리에는 더 엄격한 샌드박스 정책을 제공하는 전용 sandbox.h도 포함되어 있습니다.

호스트 코드는 '일반' 프로그램을 나타내지 않으며, 대신 단위 테스트를 사용하여 SAPI 라이브러리의 기능을 보여줍니다.

이 예에서는 두 접근 방식을 비교하기 위해 protobuf 기반이 아닌 함수도 포함되어 있습니다.