#!/usr/pkg/bin/python """reverse of 'dump' utility that comes with cygwin""" import sys, os, re, codecs from types import * try: True except: # old version of python, doesn't have True and False defined True, False = 1, 0 self = sys.argv.pop(0).split(os.sep)[-1] help = "Usage: %s [-o OUTPUTFILE] [FILE...]\n" % self hexdecode = codecs.getdecoder('hex_codec') if len(sys.argv) < 1: sys.stderr.write(help) sys.exit(0) output, outputfile = None, None outputextension = ".exe" # appended to name of dumpfile when producing output try: while sys.argv[0][0] == "-": flag = sys.argv.pop(0) if flag == "-o": outputfile = sys.argv.pop(0) if outputfile == "-": output = sys.stdout # you can specify "-o '*.o' a.dmp", makes a.dmp.o elif outputfile[0] == "*": outputextension = outputfile[1:] else: output = open(outputfile, "r") except Exception, exception: sys.stderr.write(exception.value + "\n" + help) sys.exit(1) for filename in sys.argv: infile = open(filename, "r") outfile = output if outfile is None: outfile = open(filename + outputextension, "wb") done = False while not done: line = infile.readline() if len(line) == 0: done = True break else: regexp = re.compile("^[0-9A-Fa-f]{8}\s+([0-9A-Fa-f]{2,4}\s+){1,8}") match = regexp.search(line) if type(match) is not NoneType: hexstring = ''.join(match.group().split()[1:]) outfile.write(hexdecode(hexstring)[0])