4. 執行沙箱

在先前的章節中,您準備了沙箱環境、政策、執行器和 Sandboxee。下一步是建立 Sandbox2 物件並執行。

以同步方式執行

沙箱可以同步執行,因此會封鎖,直到有結果為止。下列程式碼片段說明如何建立 Sandbox2 物件的例項,並同步執行。如需更詳細的範例,請參閱靜態

#include "sandboxed_api/sandbox2/sandbox2.h"

sandbox2::Sandbox2 s2(std::move(executor), std::move(policy));
sandbox2::Result result = s2.Run();  // Synchronous
LOG(INFO) << "Result of sandbox execution: " << result.ToString();

以非同步方式執行

您也可以非同步執行沙箱,因此在有結果之前不會遭到封鎖。舉例來說,這在與 Sandboxee 通訊時非常實用。下方的程式碼片段示範這個用途,如需更詳細的範例,請參閱 crc4tool

#include "sandboxed_api/sandbox2/sandbox2.h"

sandbox2::Sandbox2 s2(std::move(executor), std::move(policy));
if (s2.RunAsync()) {
  // Communicate with sandboxee, use s2.Kill() to kill it if needed
  // ...
}
Sandbox2::Result result = s2.AwaitResult();
LOG(INFO) << "Final execution status: " << result.ToString();