#!/usr/bin/env python3

import subprocess as sp

def main(args):
    with open(args.disk, 'rb') as f:
        f.seek(args.block * args.block_size)
        block = (f.read(args.block_size)
            .ljust(args.block_size, b'\xff'))

    # what did you expect?
    print("%-8s  %-s" % ('off', 'data'))
    return sp.run(['xxd', '-g1', '-'], input=block).returncode

if __name__ == "__main__":
    import argparse
    import sys
    parser = argparse.ArgumentParser(
        description="Hex dump a specific block in a disk.")
    parser.add_argument('disk',
        help="File representing the block device.")
    parser.add_argument('block_size', type=lambda x: int(x, 0),
        help="Size of a block in bytes.")
    parser.add_argument('block', type=lambda x: int(x, 0),
        help="Address of block to dump.")
    sys.exit(main(parser.parse_args()))