#!/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)