Hexadecimální výpis
Hexadecimální výpis (šestnáctkový výpis, hexadecimální dump, anglicky hex dump) je ve výpočetní technice výpis obsahu paměti, souboru nebo přenášených dat v šestnáctkové soustavě, který se používá při ladění nebo reverzním inženýrství. Někdy se používají i výpisy v osmičkové nebo desítkové soustavě.
V hexadecimálním výpise je hodnota bytu reprezentována dvouciferným šestnáctkovým číslem. Celý výpis je obvykle rozdělen na řádky po 8 nebo 16 bytech, přičemž hodnoty jednotlivých bytů bývají odděleny mezerami. Řádky hexadecimálního výpisu zpravidla začínají adresou v paměti nebo posunutím od začátku souboru a mohou končit kontrolním součtem.
Programy pro hexadecimální výpis se jmenují hexdump
, hd
, od
, xxd
, případně dump
, nebo dokonce D
.
Příklady
[editovat | editovat zdroj]Ukázka části hexadecimálního výpisu vytvořeného Unixovým programem hexdump
:
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
Každý řádek začíná adresou (zapsanou také v šestnáctkové soustavě) a reprezentuje 16 bytů dat. Výpis však není jednoznačný, protože pořadí bytů ve slově je různé na různých architekturách počítačů. Někdy může dávat smysl vypouštět mezery mezi zápisem bytů patřících k sobě:
00105e0 e6 b008 04e79e08 04e7bc 08 04 e7 d50804
Pokud je požadován výpis po bytech (například pro hexadecimální výpis programu ve strojovém kódu nebo obsahu operační paměti), obvykle se používá výpis po 16 bytech s případným oddělovačem mezi oběma osmibytovými skupinami:
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
Občas se používá také zhuštěný tvar bez mezer mezi hodnotami:
00105e0 e6b00804e79e0804e7bc0804e7d50804 00105f0 e7e40804e6b00804e7f00804e7ff0804 0010600 e80b0804e81a0804e6b00804e6b00804
V Unixu se implicitně tentýž obsah zobrazí jako dvoubytová slova, která na počítačích s procesory x86 používajících pořadí bytů little endian budou vypadat takto:
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
Hexadecimální výpis je často doplněn o reprezentaci jednotlivých bytů v kódu ASCII (například hexdump -C
nebo hd
):
0000: 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66 Wikipedia, the f
0010: 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61 ree encyclopedia
0020: 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E that anyone can
0030: 20 65 64 69 74 2E edit.
Kontrolní součet
[editovat | editovat zdroj]Pokud je hexadecimální výpis určen pro manuální zadávání do počítače, jak tomu bylo v minulosti v některých časopisech o domácích počítačích, bývá na konci každého řádek jeden nebo dva bajty kontrolního součtu, obvykle spočítaného jako jednoduchý součet všech datových hodnot v řádku modulo 256 nebo rafinovanější cyklický redundantní součet (CRC). Tento kontrolní součet slouží pro kontrolu, zda řádek byl opsán správně.
Různé formáty souborů pro hexadecimální výpis, včetně Intel HEX, S-record a Tektronix extended HEX, mají hodnotu kontrolního součtu na konci každého řádku.
Komprimace duplicitních řádků
[editovat | editovat zdroj]Unixové programy od a hexdump místo opakovaného výpisu řádků se stejným obsahem vypisují pouze řádek obsahující hvězdičku. Například blok 48 nulových bytů se vypíše takto:
0000000 0000 0000 0000 0000 0000 0000 0000 0000 * 0000030
Tato komprimační vlastnost činí z uvedených programů užitečný nástroj pro hledání nepravidelností v rozsáhlých souborech nebo na celých zařízeních. V moderních Linuxových systémech tak lze snadno zkontrolovat, že celý pevný disk je prázdný:
# hexdump /dev/sda
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
nnnnnnn
Volba -v komprimaci vypne – způsobí, že hexdump a od budou vypisovat i opakované řádky:
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
Unixové systémy: od a hexdump
[editovat | editovat zdroj]Na unixových systémech jsou obvykle dostupné příkazy od
a/nebo hexdump
pro hexadecimální (případně oktalový) výpis obsahu souboru. Programy se liší svým výstupem a přepínači.[1] V minulosti byl na některých systémech jeden z programů nedoporučován, v současnosti jsou však oba plně podporovány.[2][3]
CP/M: DUMP, DDT a DEBUG
[editovat | editovat zdroj]V 8bitovém operačním systému CP/M používaném na prvních osobních počítačích je DUMP standardní program, který vypisuje obsah soubor po 16 bytech na řádek s hodnotou posunutí od začátku souboru vypsanou také v šestnáctkové soustavě na začátku každého řádku a ASCII ekvivalenty jednotlivých bytů na konci řádku.[4] Hodnoty mimo rozsah tisknutelných ASCII znaků (20 až 7E) se obvykle zobrazují tečkou, aby byl výpis zarovnaný. Stejný formát byl použit pro zobrazení obsahu paměti příkazem D ve standardním CP/M debuggeru DDT.[5] Některé programy (například debugger DEBUG pro operační systém MS-DOS) vypisují mezi 8. a 9. bytem místo mezery pomlčku.
Tento formát používá mnoho programů, především v operačních systémech odvozených od CP/M, jako DR-DOS, MS-DOS, OS/2 a Microsoft Windows. Na Linuxových systémech produkuje tento klasický výstupní formát příkaz hexcat. Tento formát je velmi oblíbený, protože se řádek výpisu vejde na jeden řádek obrazovky nebo tiskárny o délce 80 znaků, a přitom je velmi dobře čitelný a zobrazuje i tisknutelné znaky.
1234:0000: 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66 Wikipedia, the f
1234:0010: 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61 ree encyclopedia
1234:0020: 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E that anyone can
1234:0030: 20 65 64 69 74 2E 00 00 00 00 00 00 00 00 00 00 edit...........
V tomto výpisu je adresa na začátku řádku zapsána ve tvaru segment:offset používaném na systémech DOS pracujících v reálném režimu na mikroprocesorech x86, kde jsou adresy složeny ze dvou složek (báze a posunutí).
V výše uvedeném příkladě jsou neexistující byty za koncem souboru vypsány jako nuly. Mnoho programů vypisuje mezery nebo hvězdičky, aby bylo jasné, kde soubor končí:
1234:0000: 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66 Wikipedia, the f
1234:0010: 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61 ree encyclopedia
1234:0020: 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E that anyone can
1234:0030: 20 65 64 69 74 2E edit.
nebo
1234:0000: 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66 Wikipedia, the f
1234:0010: 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61 ree encyclopedia
1234:0020: 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E that anyone can
1234:0030: 20 65 64 69 74 2E ** ** ** ** ** ** ** ** ** ** edit.
Odkazy
[editovat | editovat zdroj]Reference
[editovat | editovat zdroj]V tomto článku byl použit překlad textu z článku Hex dump na anglické Wikipedii.
- ↑ MERTZ, David. The GNU Text Utilities: od and hexdump [online]. [cit. 2020-11-12]. Dostupné online.
- ↑ Revision 96787: Un-deprecate od(1) [online]. 2002-05-17 [cit. 2020-11-12]. Dostupné online.
- ↑ ŽÁK, Karel. The util-linux code repository [online]. 2014-10-01 [cit. 2020-11-12]. Dostupné online.
- ↑ CP/M Operating System Manual. 3. vyd. Pacific Grove, California: DIGITAL RESEARCH TM, září 1983. Dostupné online. S. 1–41, 5–40 až 5–46. (anglicky)
- ↑ CP/M Operating System Manual. 3. vyd. Pacific Grove, California: DIGITAL RESEARCH TM, září 1983. Dostupné online. S. 4–5. (anglicky)
Související články
[editovat | editovat zdroj]Externí odkazy
[editovat | editovat zdroj]- Manual on How to Use the Hexdump Unix Utility Popis parametrů
- hdr Hexdump s barevně zvýrazněnými rozsahy pro lepší přehled. Umí přeskakovat data, zobrazovat bitová pole, lze definovat složité rozsahy, … použijte odkaz na 'hdr_examples.pod'.
- Hex cheatsheet – tabulky pro vyhledávání kódů bytů