개요
첫 번째 샌드박스 API 라이브러리를 구현하는 데 도움이 되는 몇 가지 예시를 준비했습니다.
//sandboxed_api/examples에서 확인할 수 있습니다. 자세한 설명은 아래를 참고하세요.
hello_sapi
SAPI의 작동 방식을 보여주는 매우 기본적인 예입니다. hello_lib.cc는 샌드박스 처리되고 호스트 코드에서 호출될 AddTwoIntegers()
함수를 구현합니다.
두 번째 호스트 코드 파일인 hello_transacted.cc는 SAPI 트랜잭션의 사용 예를 보여줍니다.
합계
몇 가지 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를 사용하여 문자열 reverse
및 duplication
함수를 제공하는 방법을 보여줍니다. 라이브러리에는 더 엄격한 샌드박스 정책을 제공하는 전용 sandbox.h도 포함되어 있습니다.
호스트 코드는 '일반' 프로그램을 나타내지 않으며, 대신 단위 테스트를 사용하여 SAPI 라이브러리의 기능을 보여줍니다.
이 예에서는 두 접근 방식을 비교하기 위해 protobuf 기반이 아닌 함수도 포함되어 있습니다.