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 通訊時非常實用。下方的程式碼片段示範這個用途,如需更詳細的範例,請參閱 crc4 和 tool。
#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();