mirror of
https://github.com/AsahiLinux/m1n1
synced 2024-11-27 00:40:17 +00:00
edbe471804
-m <script> Run a script in hypervisor context prior to starting the guest. This is essentially the same as the shell context. -c <code> Run a literal string of code prior to starting the guest. -S Start a shell instead of directly starting the guest. Use `start` to actually begin guest execution. This also adds a couple example scripts under hv/. Signed-off-by: Hector Martin <marcan@marcan.st>
50 lines
1.4 KiB
Python
Executable file
50 lines
1.4 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
# SPDX-License-Identifier: MIT
|
|
import sys, pathlib
|
|
sys.path.append(str(pathlib.Path(__file__).resolve().parents[1]))
|
|
|
|
import argparse, pathlib
|
|
|
|
parser = argparse.ArgumentParser(description='Run a Mach-O payload under the hypervisor')
|
|
parser.add_argument('-s', '--symbols', type=pathlib.Path)
|
|
parser.add_argument('-m', '--script', type=pathlib.Path, action='append')
|
|
parser.add_argument('-c', '--command', action="append")
|
|
parser.add_argument('-S', '--shell', action="store_true")
|
|
parser.add_argument('payload', type=pathlib.Path)
|
|
parser.add_argument('boot_args', default=[], nargs="*")
|
|
args = parser.parse_args()
|
|
|
|
from m1n1.proxy import *
|
|
from m1n1.proxyutils import *
|
|
from m1n1.utils import *
|
|
from m1n1.shell import run_shell
|
|
from m1n1.hv import HV
|
|
|
|
iface = UartInterface()
|
|
p = M1N1Proxy(iface, debug=False)
|
|
bootstrap_port(iface, p)
|
|
u = ProxyUtils(p, heap_size = 128 * 1024 * 1024)
|
|
|
|
hv = HV(iface, p, u)
|
|
|
|
hv.init()
|
|
|
|
if len(args.boot_args) > 0:
|
|
boot_args = " ".join(args.boot_args)
|
|
hv.set_bootargs(boot_args)
|
|
|
|
symfile = None
|
|
if args.symbols:
|
|
symfile = args.symbols.open("rb")
|
|
hv.load_macho(args.payload.open("rb"), symfile=symfile)
|
|
|
|
for i in args.script:
|
|
hv.run_script(i)
|
|
|
|
for i in args.command:
|
|
hv.run_code(i)
|
|
|
|
if args.shell:
|
|
run_shell(hv.shell_locals, "Entering hypervisor shell. Type `start` to start the guest.")
|
|
else:
|
|
hv.start()
|