4. Sandbox ausführen

In den vorherigen Abschnitten haben Sie die Sandbox-Umgebung, Richtlinie, Executor und Sandboxee vorbereitet. Im nächsten Schritt erstellen Sie das Objekt Sandbox2 und führen es aus.

Synchron ausführen

Die Sandbox kann synchron ausgeführt werden und blockiert daher, bis ein Ergebnis vorliegt. Das folgende Code-Snippet zeigt die Instanziierung des Sandbox2-Objekts und seine synchrone Ausführung. Ein ausführlicheres Beispiel finden Sie unter statisch.

#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();

Asynchron ausführen

Sie können die Sandbox auch asynchron ausführen, sodass sie nicht blockiert wird, bis ein Ergebnis eintritt. Dies ist beispielsweise bei der Kommunikation mit dem Sandboxee nützlich. Das folgende Code-Snippet veranschaulicht diesen Anwendungsfall. Ausführlichere Beispiele finden Sie unter crc4 und 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();