blob: 665f04a000fccd9250a94357be9c16891a45c855 [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:
Johannes Krampf19f789b2014-01-19 16:03:49 +010047 if (sys.version_info > (3, 0)):
48 sys.stdout.buffer.write(struct.pack("<I", i))
49 else:
50 sys.stdout.write(struct.pack("<I", i))
Kevin O'Connor597040d2010-07-30 18:51:29 -040051
52if __name__ == '__main__':
53 main()