Quiero trazar los bytes de una imagen de disco para comprender un patrón en ellos. Esto es principalmente una tarea académica, ya que estoy casi seguro de que este patrón fue creado por un programa de prueba de disco, pero me gustaría realizar ingeniería inversa de todos modos.
Ya sé que el patrón está alineado, con una periodicidad de 256 caracteres.
Puedo imaginar dos formas de visualizar esta información: un plano de 16x16 visto a través del tiempo (3 dimensiones), donde el color de cada píxel es el código ASCII para el personaje, o una línea de 256 píxeles para cada período (2 dimensiones).
Esta es una instantánea del patrón (puede ver más de uno), visto a través de xxd
(32x16):
De cualquier manera, estoy tratando de encontrar una manera de visualizar esta información. Probablemente esto no sea difícil para nadie en el análisis de señales, pero parece que no puedo encontrar una manera de usar software de código abierto.
Me gustaría evitar Matlab o Mathematica y preferiría una respuesta en R, ya que la he estado aprendiendo recientemente, pero no obstante, cualquier idioma es bienvenido.
Actualización, 25/07/2014: dada la respuesta de Emre a continuación, así es como se ve el patrón, dados los primeros 30 MB del patrón, alineados en 512 en lugar de 256 (esta alineación se ve mejor):
Cualquier otra idea es bienvenida!
fuente
Respuestas:
Yo usaría un análisis visual. Como sabe que hay una repetición cada 256 bytes, cree una imagen de 256 píxeles de ancho por la profundidad que sea y codifique los datos con brillo. En (i) python se vería así:
Así es como se ve un PDF:
Un patrón periódico de 256 bytes se habría manifestado como líneas verticales. Excepto por el encabezado y la cola, parece bastante ruidoso.
fuente
python-scitools
yipython
. El mensaje de error esValueError: invalid literal for int() with base 10: '#'
.ipython
, y cambiandomap(int, line)
amap(ord, line)
, y actualicé la pregunta con la nueva imagen.No sé casi nada sobre el análisis de señales, pero la visualización de 2 dimensiones se podía hacer fácilmente usando R. Particularmente necesitará
reshape2
yggplot2
paquetes. Suponiendo que sus datos son anchos (por ejemplo, tamaño [n X 256]), primero debe transformarlos a formato largo utilizando lamelt()
función delreshape2
paquete. Luego usageom_tile
geometría deggplot2
. Aquí hay una buena receta con esencia .fuente
Vería el
raster
paquete para esto, que puede leer datos binarios sin procesar y presentarlo como cuadrículas NxM. Incluso puede extraer subconjuntos de grandes cuadrículas binarias sin tener que leer todo el archivo (el objeto R raster en sí mismo es solo un proxy de los datos, no los datos en sí).fuente