import argparse import json import mmap import os import struct import sys from pathlib import Path from unwrap_self import FIRST_REGION, SELF_MAGIC, SELF_MAGIC_KERNEL, Refused, parse_elf, read_records def main(argv=None): for stream in (sys.stdout, sys.stderr): if hasattr(stream, "reconfigure"): stream.reconfigure(encoding="utf-8", errors="backslashreplace") parser = argparse.ArgumentParser(description="Inspect SELF record and original inner ELF header metadata as JSON; this does not validate conversion or decrypt segments") parser.add_argument("input", type=Path) args = parser.parse_args(argv) try: with args.input.open("rb") as source: if os.fstat(source.fileno()).st_size < FIRST_REGION: raise Refused("file is smaller than the SELF header area") with mmap.mmap(source.fileno(), 0, access=mmap.ACCESS_READ) as data: magic = struct.unpack_from("