Guest User

Untitled

a guest
Jan 19th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.63 KB | None | 0 0
  1. #!/usr/bin/python2
  2. import struct, sys
  3.  
  4. ONENAND_BASE = 0x08000000
  5. ONENAND_REG_SIZE = 2
  6.  
  7. class BaseRegion(object):
  8. def __init__(self, name, size, reserved=False):
  9. self.name = name
  10. self.size = size
  11. self.reserved = reserved
  12.  
  13. def __str__(self):
  14. return '%s (%d)' % (self.name, self.size)
  15.  
  16.  
  17. class ReservedRegion(BaseRegion):
  18. def __init__(self, size):
  19. BaseRegion.__init__(self, 'Reserved', size, reserved=True)
  20.  
  21. def parse(self, file, base):
  22. data = file.read(self.size)
  23. return
  24. # return '%s (%08x-%08x)\n' % (str(self), base, (base+self.size))
  25.  
  26.  
  27. class Register(BaseRegion):
  28. def __init__(self, name):
  29. BaseRegion.__init__(self, name, ONENAND_REG_SIZE)
  30.  
  31. def parse(self, file, base):
  32. data = file.read(self.size)
  33. value, = struct.unpack('H', data)
  34. return '%08x: [%04x] %20s: %08x' % (base, ((base - ONENAND_BASE) >> 1), self.name, value)
  35.  
  36. class DataRegion(BaseRegion):
  37. def parse(self, file, base):
  38. data = file.read(self.size)
  39.  
  40. out = '%s\n' % str(self)
  41.  
  42. if self.reserved:
  43. return out
  44.  
  45. for i in xrange(len(data)):
  46. if i % 16 == 0:
  47. if i > 0:
  48. out += '\n'
  49.  
  50. out += '%08x: ' % (base+i)
  51.  
  52. out += '%02x ' % ord(data[i])
  53.  
  54. out += '\n\n'
  55. return out
  56.  
  57. memory_map = [
  58. DataRegion('BootRAM_1/2', 512 * 2),
  59. DataRegion('DataRAM_0', 512 * 4),
  60. DataRegion('DataRAM_1', 512 * 4),
  61. ReservedRegion(59 * 1024),
  62.  
  63. DataRegion('BootRAM_Spare_1/2', 16 * 2),
  64. DataRegion('DataRAM_Spare_1', 16 * 4),
  65. DataRegion('DataRAM_Spare_2', 16 * 4),
  66. ReservedRegion(8032),
  67.  
  68. ReservedRegion((24 + 8 + 16) * 1024),
  69.  
  70. Register('Manufacturer ID'),
  71. Register('Device ID'),
  72. Register('Version ID'),
  73. Register('Data buf size'),
  74. Register('Boot buf size'),
  75. Register('Amt. buffers'),
  76. Register('Technology'),
  77. ReservedRegion(0x1f2),
  78. Register('Start addr. 1'),
  79. Register('Start addr. 2'),
  80. Register('Start addr. 3'),
  81. Register('Start addr. 4'),
  82. Register('Start addr. 5'),
  83. Register('Start addr. 6'),
  84. Register('Start addr. 7'),
  85. Register('Start addr. 8'),
  86. ReservedRegion(0x1f0),
  87. Register('Start buffer'),
  88. ReservedRegion(0x0c),
  89. ReservedRegion(0x33),
  90. Register('Command'),
  91. Register('Sysconf. 1'),
  92. Register('Sysconf. 2'),
  93. ReservedRegion(0x18),
  94. ReservedRegion(0x1e),
  95. Register('Ctrlr. status'),
  96. Register('Interrupt'),
  97. ReservedRegion(0x18),
  98. Register('Start blk. addr.'),
  99. ReservedRegion(0x2),
  100. Register('Write prot. status'),
  101. ReservedRegion(0x1962),
  102. Register('ECC status'),
  103. Register('ECC main sec. 1'),
  104. Register('ECC spare sec. 1'),
  105. Register('ECC main sec. 2'),
  106. Register('ECC spare sec 2'),
  107. Register('ECC main sec 3'),
  108. Register('ECC spare sec 3'),
  109. Register('ECC main sec 4'),
  110. Register('ECC spare sec 4'),
  111. ]
  112.  
  113. class MemoryRegion:
  114. def __init__(self, base):
  115. self.base = base
  116. self.offset = 0
  117. self.types = []
  118.  
  119. def add(self, type):
  120. self.types.append(type)
  121.  
  122. def parse(self, file):
  123. for t in self.types:
  124. res = t.parse(file, self.base + self.offset)
  125. if res:
  126. print res
  127.  
  128. self.offset += t.size
  129.  
  130. if __name__ == '__main__':
  131. if len(sys.argv) < 2:
  132. print 'Usage: regparse.py <dump>'
  133. sys.exit(1)
  134.  
  135. mr = MemoryRegion(ONENAND_BASE)
  136. map(mr.add, memory_map)
  137.  
  138. f = open(sys.argv[1], 'rb')
  139. mr.parse(f)
Add Comment
Please, Sign In to add comment