En informática , un volcado hexadecimal es una vista hexadecimal (en pantalla o en papel) de datos informáticos, desde la RAM o desde un archivo informático o dispositivo de almacenamiento . La observación de un volcado hexadecimal de datos generalmente se realiza en el contexto de depuración o ingeniería inversa .
En un volcado hexadecimal, cada byte (8 bits ) se representa como un número hexadecimal de dos dígitos . Los volcados hexadecimales se organizan comúnmente en filas de 8 o 16 bytes, a veces separados por espacios en blanco. Algunos volcados hexadecimales tienen la dirección de memoria hexadecimal al principio y / o un byte de suma de comprobación al final de cada línea.
Aunque el nombre implica el uso de salida en base 16, algunos software de volcado hexadecimal pueden tener opciones para salida en base 8 (octal) o base 10 (decimal). Algunos nombres comunes para esta función del programa son hexdump
, hd
, od
, xxd
y simplemente dump
o incluso D
.
Muestras
Un ejemplo de volcado hexadecimal parcial de un programa, producido por el programa Unixhexdump
:
00105e0 e6b0 343b 9c74 0804 e7bc 0804 e7d5 0804 00105f0 e7e4 0804 e6b0 0804 e7f0 0804 e7ff 0804 0010600 e80b 0804 e81a 0804 e6b0 0804 e6b0 0804
La columna más a la izquierda es la dirección hexadecimal para los valores de 16 bits de las siguientes columnas. Cada fila representa 16 bytes (hexadecimal 10).
Sin embargo, el ejemplo anterior representa una forma ambigua de volcado hexadecimal, ya que el orden de los bytes puede ser incierto. Dichos volcados hexadecimales son buenos solo en el contexto de un estándar de orden de bytes bien conocido o cuando los valores se dan intencionalmente en su forma completa (y pueden resultar en un número variable de bytes), como:
00105e0 e6 b008 04e79e08 04e7bc 08 04 e7 d50804
Cuando se requiere una secuencia de bytes explícita (por ejemplo, para el volcado hexadecimal de programas de código de máquina o contenido de ROM ), se prefiere una representación byte por byte, comúnmente organizada en filas de 16 bytes con un divisor opcional entre grupos de 8 bytes:
00105e0 e6 b0 08 04 e7 9e 08 04-e7 bc 08 04 e7 d5 08 04 00105f0 e7 e4 08 04 e6 b0 08 04-e7 f0 08 04 e7 ff 08 04 0010600 e8 0b 08 04 e8 1a 08 04-e6 b0 08 04 e6 b0 08 04
En raras ocasiones, también se utiliza una forma condensada, sin espacios en blanco entre los valores:
00105e0 e6b00804e79e0804e7bc0804e7d50804 00105f0 e7e40804e6b00804e7f00804e7ff0804 0010600 e80b0804e81a0804e6b00804e6b00804
Una visualización predeterminada de Unix de esos mismos bytes como palabras de dos bytes en una computadora moderna x86 ( little-endian ) generalmente se vería así:
00105e0 b0e6 0408 9ee7 0408 bce7 0408 d5e7 0408 00105f0 e4e7 0408 b0e6 0408 f0e7 0408 ffe7 0408 0010600 0be8 0408 1ae8 0408 b0e6 0408 b0e6 0408
A menudo, una columna adicional muestra la traducción de texto ASCII correspondiente (por ejemplo, hexdump -C
o hd
):
00000000 57 69 6b 69 70 65 64 69 61 2c 20 74 68 65 20 66 Wikipedia, la f 00000010 72 65 65 20 65 6e 63 79 63 6c 6f 70 65 64 69 61 ree enciclopedia 00000020 20 74 68 61 74 20 61 6e 79 6f 6e 65 20 63 61 6e que cualquiera puede 00000030 20 65 64 69 74 0a editar 00000036
Suma de comprobación
Cuando los volcados hexadecimales están destinados a ser ingresados manualmente en una computadora, como fue el caso de los artículos de revistas impresas de la era de la computadora doméstica , se agregaría un byte de suma de verificación (o dos) al final de cada fila, comúnmente calculado como 256 módulo de suma de todos los valores de la fila o un CRC más sofisticado . Esta suma de verificación se usaría para determinar si los usuarios ingresaron la fila correctamente o no.
Una variedad de formatos de archivo de volcado hexadecimal, incluidos S-record , Intel HEX y Tektronix Extended HEX , tienen un valor de suma de comprobación similar al final de cada fila.
Compresión de líneas duplicadas
En los programas Unix od y hexdump , no se muestran todas las líneas de salida de pantalla que contienen los mismos datos que la línea anterior; en su lugar, se muestra una línea que contiene solo un asterisco. Por ejemplo, un bloque de todos ceros se imprime como:
0000000 0000 0000 0000 0000 0000 0000 0000 0000 * 0000030
Esta función de compresión es una herramienta útil para inspeccionar archivos grandes o dispositivos completos en busca de irregularidades. En un sistema Linux moderno , es conveniente escanear un disco duro completo para verificar si está todo en blanco:
# hexdump / dev / sda ( reemplace sda con el nombre adecuado para el dispositivo que se escaneará )
La -v
opción hace que hexdump y od muestren todos los datos de entrada, explícitamente:
0000000 0000 0000 0000 0000 0000 0000 0000 0000 0000010 0000 0000 0000 0000 0000 0000 0000 0000 0000020 0000 0000 0000 0000 0000 0000 0000 0000
od y hexdump
En sistemas Unix / POSIX / GNU: "Las utilidades od y hexdump dan salida a octal, hexadecimal o bytes codificados de otro modo desde un archivo o flujo. Dependiendo de su tipo de sistema, una o ambas de estas dos utilidades estarán disponibles - Anteriormente, BSD los sistemas obsoletos para hexdump, los sistemas GNU al revés. Las dos utilidades, sin embargo, tienen exactamente el mismo propósito, solo conmutadores ligeramente diferentes ". [1] Sin embargo, desde POSIX, en 2002, tanto FreeBSD [2] como GNU [3] revocaron esa decisión, y tanto od como hexdump son totalmente compatibles.
DUMP, DDT y DEBUG
En el sistema operativo CP / M de 8 bits utilizado en las primeras computadoras personales, el programa DUMP estándar enumeraría un archivo de 16 bytes por línea con el desplazamiento hexadecimal al comienzo de la línea y el equivalente ASCII de cada byte al final. [4] Los bytes fuera del rango estándar de caracteres ASCII imprimibles (20 a 7E) se mostrarían como un solo período para la alineación visual. Este mismo formato se utilizó para mostrar la memoria al invocar el comando D en el depurador estándar CP / M DDT . [5] Las encarnaciones posteriores del formato (por ejemplo, en el depurador de DOS DEBUG ) cambiaron el espacio entre el octavo y el noveno byte a un guión, sin cambiar el ancho total.
Esta notación se ha conservado en los sistemas operativos que se derivaron directa o indirectamente de CP / M, incluidos DR-DOS , MS-DOS , OS / 2 y MS-Windows . En los sistemas Linux, el comando hexcat también produce este formato de salida clásico. La razón principal para el diseño de este formato es que se ajusta a la máxima cantidad de datos en una pantalla o impresora estándar de 80 caracteres de ancho, sin dejar de ser muy fácil de leer y leer visualmente.
1234 : 0000 : 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66 Wikipedia, el f 1234 : 0010 : 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61 ree enciclopedia 1234 : 0020 : 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E que cualquiera puede 1234 : 0030 : 20 65 64 69 74 00 00 00 00 00 00 00 00 00 00 00 editar .......... .
Aquí, la columna de la izquierda representa la dirección en la que se encuentran los bytes representados por las siguientes columnas. CP / M y varios sistemas DOS se ejecutaron en modo real en las CPU x86 , donde las direcciones se componen de dos partes (base y offset).
En los ejemplos anteriores, los 00 finales son bytes inexistentes más allá del final del archivo. Algunas herramientas de volcado muestran otros caracteres para que quede claro que están más allá del final del archivo, generalmente usando espacios o asteriscos, por ejemplo:
1234 : 0000 : 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66 Wikipedia, el f 1234 : 0010 : 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61 ree enciclopedia 1234 : 0020 : 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E que cualquiera puede 1234 : 0030 : 20 65 64 69 74 editar
o
1234 : 0000 : 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66 Wikipedia, el f 1234 : 0010 : 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61 ree enciclopedia 1234 : 0020 : 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E que cualquiera puede 1234 : 0030 : 20 65 64 69 74 ** ** ** ** ** ** ** ** ** ** ** editar
Ver también
- Volcado de memoria
Referencias
- ^ http://gnosis.cx/publish/programming/text_utils.html
- ^ https://svnweb.freebsd.org/base?view=revision&revision=96787
- ^ https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/commit/text-utils/hexdump.c?id=bf60e9f12d9bcf7d87581c69cbc103c18f7d001a
- ^ Manual de CP / M 2.2 páginas 1-41 y páginas 5-40 a 5-46
- ^ Manual de CP / M 2.2 página 4-5
enlaces externos
- Manual sobre cómo utilizar la utilidad Hexdump Unix Descripción del argumento
- hdr Hexdump con rangos de colores para facilitar la visualización. Opciones para omitir datos, mostrar campos de bits, definición de rango complejo, ... siga el enlace a 'hdr_examples.pod'.
- Hoja de trucos hexadecimal para buscar nibbles de bytes y bits de nibble.