def advance_dump(data, base): PY3K = sys.version_info >= (3, 0) generator = hexdump.genchunks(data, 16) retstr = '' for addr, d in enumerate(generator): # 00000000: line = '%08X: ' % (base + addr * 16) # 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 dumpstr = hexdump.dump(d) line += dumpstr[:8 * 3] if len(d) > 8: # insert separator if needed line += ' ' + dumpstr[8 * 3:] # ................ # calculate indentation, which may be different for the last line pad = 2 if len(d) < 16: pad += 3 * (16 - len(d)) if len(d) <= 8: pad += 1 line += ' ' * pad for byte in d: # printable ASCII range 0x20 to 0x7E if not PY3K: byte = ord(byte) if 0x20 <= byte <= 0x7E: line += chr(byte) else: line += '.' retstr += line + '\n' return retstr
def customized_dumpgen(data, offset): """ Generator that produces strings: '00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................' """ generator = hexdump.genchunks(data, 16) for addr, d in enumerate(generator): # 00000000: line = "%08X: " % ((addr * 16) + offset) # 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 dumpstr = hexdump.dump(d) line += dumpstr[:8 * 3] if len(d) > 8: # insert separator if needed line += " " + dumpstr[8 * 3:] # ................ # calculate indentation, which may be different for the last line pad = 2 if len(d) < 16: pad += 3 * (16 - len(d)) if len(d) <= 8: pad += 1 line += " " * pad for byte in d: # printable ASCII range 0x20 to 0x7E if not hexdump.PY3K: byte = ord(byte) if 0x20 <= byte <= 0x7E: line += chr(byte) else: line += "." yield line