import argparse def main(): p = argparse.ArgumentParser() p.add_argument('--file', required=True) p.add_argument('--byte', required=True, help='byte value in hex (e.g. 0x0c)') p.add_argument('--base', type=lambda x: int(x,0), default=0x80000000) p.add_argument('--start', type=lambda x: int(x,0), default=0x80064000) p.add_argument('--end', type=lambda x: int(x,0), default=0x80064800) args = p.parse_args() bval = int(args.byte, 0) with open(args.file, 'rb') as f: f.seek(0,2) size = f.tell() s = args.start - args.base e = args.end - args.base s = max(0, s) e = min(size, e) f.seek(s) data = f.read(e-s) for i, b in enumerate(data): if b == bval: addr = args.base + s + i print(hex(addr), hex(s+i)) if __name__ == '__main__': main()