from struct import pack, unpack with open("exh.bin", "rb") as f: name = f.read(8).strip(b"\x00") data = unpack("<5xBH12I", f.read(0x38)) print(b"Name: " + name) print("Flag: %02x " % data[0] + ["", "[compressed]"][data[0] & 1] + ["", "[sd app]"][(data[0] & 2) >> 1]) print("Rev.: %04x" % data[1]) print info = [".text addr: ", ".text page: ", ".text size: ", "stack size: ", ".read addr: ", ".read page: ", ".read size: ", "PleaseDoNotP", ".data addr: ", ".data page: ", ".data size: ", ".bss size: "] it = 0 for i in info: #Don't do this kids it's bad form if it != 7: #Don't print, it's zero print(i + "%08X" % data[2 + it]) if it in [3, 7]: print #Pretty print it += 1 if data[2] != 0x100000: print("WARNING: base address wrong, might be encrypted") with open("ExeFS/code.bin", "rb") as f: data1 = f.read(data[4]) #Text f.seek(data[3] * 0x1000) data2 = f.read(data[8]) #Read f.seek((data[3] + data[7]) * 0x1000) data3 = f.read(data[12]) #Data table = b"\x00.shstrtab\x00.text\x00.fini\x00.rodata\x00.memregion\x00.data\x00.bss\x00" #Please never create an ELF file from scratch you will hate yourself like me with open("ExeFS.elf", "wb") as f: f.write(b"\x7FELF\x01\x01\x01\x61" + b"\x00" * 8) #magic f.write(pack("