# Modified kip1 conversion script, originally by jakibaki # Used for dev purposes, will be replaced in the future from struct import pack, unpack from sys import argv f = open(argv[1], "rb") header_start = f.read(0x20) section_names = [".text", ".rodata", ".data", ".bss"] sections = [] for i in range(6): section_bytes = f.read(0x10) section = {} if i < len(section_names): section["Name"] = section_names[i] section["OutOffset"], section["DecompressedSize"], section["CompressedSize"], section["Attribute"] = unpack("IIII", section_bytes) sections.append(section) print(section) assert (sections[3]["OutOffset"] + sections[3]["DecompressedSize"]) % 0x1000 == 0 kernel_caps = [] for i in range(0x20): val, = unpack("I", f.read(4)) kernel_caps.append(val) f.seek(0x100) for i in range(3): section = sections[i] section["Buffer"] = f.read(section["DecompressedSize"]) print(f.read()) f.close() f = open(argv[2], "wb") for i in range(3): section = sections[i] f.seek(section["OutOffset"]) f.write(section["Buffer"]) f.seek(sections[3]["OutOffset"]) f.write(b'\0' * sections[3]["DecompressedSize"]) caps = open("emummc.caps", "wb") for i in range(0x20): caps.write(pack("I", kernel_caps[i]))