#!/usr/bin/env python3 import sys def pairwise(iterable): a = iter(iterable) return zip(a, a) files = sys.argv[1:] files = list(pairwise(files)) offset = int(files[0][0], 16) out = bytearray() for addr, fn in files: addr = int(addr, 16) - offset data = open(fn, "rb").read() if len(out) < addr: out += b"\x00" * (addr - len(out)) if len(out) != addr: raise Exception("Alignment failed") out += data sys.stdout.buffer.write(out)