개요

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

//sandboxed_api/examples에서 찾을 수 있습니다. 자세한 설명은 아래를 참조하세요.

hello_sapi

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

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

합계

몇 가지 C 함수와 단일 C++ 함수를 구현하는 데모 라이브러리입니다. protobuf를 사용하여 호스트 코드와 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를 사용하여 문자열 reverseduplication 함수를 제공하는 방법을 보여줍니다. 라이브러리에는 더 엄격한 샌드박스 정책을 제공하기 위한 전용 sandbox.h도 포함되어 있습니다.

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

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