Explorar el Código

Initial commit

Zhuowei Zhang hace 3 años
commit
a62ded0e76
Se han modificado 3 ficheros con 46 adiciones y 0 borrados
  1. 1 0
      .clang-format
  2. 1 0
      build.sh
  3. 44 0
      hv.m

+ 1 - 0
.clang-format

@@ -0,0 +1 @@
+BasedOnStyle: Google

+ 1 - 0
build.sh

@@ -0,0 +1 @@
+exec clang -fmodules -target arm64e-apple-macos12 -o hv hv.m

+ 44 - 0
hv.m

@@ -0,0 +1,44 @@
+// Decompiled by hand (based-ish on a Ghidra decompile) from Hypervisor.framework on macOS 12.0b1
+@import Darwin;
+#include <assert.h>
+
+typedef uint64_t hv_return_t;
+typedef void* hv_vm_config_t;
+
+#define HV_CALL_VM_CREATE 1
+
+__attribute__((naked)) uint64_t hv_trap(unsigned int hv_call, void* hv_arg) {
+  asm volatile("mov x16, #-0x5\n"
+               "svc 0x80\n"
+               "ret\n");
+}
+
+struct hv_vm_create_kernel_args {
+  uint64_t field_0;    // 0x0
+  uint64_t field_8;    // 0x8
+  int32_t field_10;    // 0x10
+  uint32_t unused_14;  // 0x14
+  int32_t field_18;    // 0x18
+};
+static_assert(sizeof(struct hv_vm_create_kernel_args) == 0x20, "hv_vm_create_kernel_args size");
+
+const struct hv_vm_create_kernel_args kDefaultVmCreateKernelArgs = {
+    .field_0 = 0,
+    .field_8 = 0,
+    .field_10 = 0,
+    .unused_14 = 0,
+    .field_18 = 1,
+};
+
+hv_return_t hv_vm_create(hv_vm_config_t config) {
+  struct hv_vm_create_kernel_args args = kDefaultVmCreateKernelArgs;
+  if (config) {
+    // TODO(zhuowei): figure this out?
+  }
+  return hv_trap(HV_CALL_VM_CREATE, &args);
+}
+
+int main() {
+  hv_return_t err = hv_vm_create(nil);
+  printf("%llu\n", err);
+}