blob: 4caaeb70b7e89ca54188525cdaf45dbbe73dd68f [file] [log] [blame]
Kevin O'Connor597040d2010-07-30 18:51:29 -04001#!/usr/bin/env python
2
3# This script is useful for taking the output of memdump() and
4# converting it back into binary output. This can be useful, for
5# example, when one wants to push that data into other tools like
6# objdump or hexdump.
7#
8# (C) Copyright 2010 Kevin O'Connor <kevin@koconnor.net>
9#
10# This file may be distributed under the terms of the GNU GPLv3 license.
11
12import sys
13import struct
14
15def unhex(str):
16 return int(str, 16)
17
18def parseMem(filehdl):
19 mem = []
20 for line in filehdl:
21 parts = line.split(':')
22 if len(parts) < 2:
23 continue
24 try:
25 vaddr = unhex(parts[0])
Kevin O'Connor7ce09ae2010-08-28 12:54:23 -040026 parts = parts[1].split()
27 mem.extend([unhex(v) for v in parts])
Kevin O'Connor597040d2010-07-30 18:51:29 -040028 except ValueError:
29 continue
Kevin O'Connor597040d2010-07-30 18:51:29 -040030 return mem
31
32def printUsage():
33 sys.stderr.write("Usage:\n %s <file | ->\n"
34 % (sys.argv[0],))
35 sys.exit(1)
36
37def main():
38 if len(sys.argv) != 2:
39 printUsage()
40 filename = sys.argv[1]
41 if filename == '-':
42 filehdl = sys.stdin
43 else:
44 filehdl = open(filename, 'r')
45 mem = parseMem(filehdl)
46 for i in mem:
47 sys.stdout.write(struct.pack("<I", i))
48
49if __name__ == '__main__':
50 main()