4. Sandbox ausführen
In den vorherigen Abschnitten haben Sie die Sandbox-Umgebung, die Richtlinie, den Executor und das Sandboxee vorbereitet. Als Nächstes erstellen Sie das Sandbox2
-Objekt und führen es aus.
Synchron ausführen
Die Sandbox kann synchron ausgeführt werden, sodass sie blockiert wird, 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 static.
#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 die Ausführung nicht blockiert wird, bis ein Ergebnis vorliegt. Das ist z. B. nützlich, wenn Sie mit dem Sandboxee kommunizieren. Das folgende Code-Snippet veranschaulicht diesen Anwendungsfall. Weitere detaillierte 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();