import struct, sys, shutil, os def align(x, a): return (x + a - 1) // a * a def main(): src, dst = sys.argv[1], sys.argv[2] size = int(sys.argv[3], 0) if len(sys.argv) > 3 else 0x300000 secname = sys.argv[4] if len(sys.argv) > 4 else ".cjk" data = bytearray(open(src, "rb").read()) e_lfanew = struct.unpack_from(" secs[0][2]: print("no room for new section header", file=sys.stderr) sys.exit(3) hdr = so + nsec * 40 name = secname.encode("ascii")[:8].ljust(8, b"\x00") struct.pack_into("<8sIIII", data, hdr, name, size, new_va, align(size, file_align), new_raw) struct.pack_into(" %s (%d bytes)" % (secname, new_va, new_raw, size, dst, len(data))) print("section VA (absolute, imagebase 0x%x): 0x%x" % (imagebase, imagebase + new_va)) if __name__ == "__main__": main()