#!/usr/bin/ruby $stderr.puts "Usage #{__FILE__} out.raw" if ARGV.size < 1 then exit end file_name = ARGV.shift raw_data = nil open(file_name){|io| io.binmode raw_data = io.read } marker_indexes = [] str_index = 0 while str_index str_index = raw_data.index(0xFF, str_index) if str_index then marker_indexes << str_index str_index += 1 end end marker_indexes.reject!{|str_index| packet_length = raw_data[str_index + 2, 2].unpack("n").first raw_data[str_index + 4 + packet_length] != 0xFF } marker_indexes.each{|str_index| marker_type = raw_data[str_index + 1] puts sprintf("%d => %02x", str_index, marker_type) }