#!/usr/bin/env python import argparse import re import sys def main(): argp = argparse.ArgumentParser() argp.add_argument("infile", type=argparse.FileType("rb"), help="Input vmcore file") argp.add_argument( "outfile", type=argparse.FileType("wb"), help="Output vmcore file" ) args = argp.parse_args() inf = args.infile outf = args.outfile line_re = re.compile(r"^% RD: (\d+) (\d+)") # copy the first chunk that usually includes ELF headers # (not output by patched libfbsdvmcore since libelf reads this) outf.write(inf.read(1024)) for l in sys.stdin: m = line_re.match(l) if m is None: continue offset, size = [int(x) for x in m.groups()] inf.seek(offset) outf.seek(offset) outf.write(inf.read(size)) if __name__ == "__main__": main()