OKdump

 

je program pro výpis obsahu souboru v hexadecimálním a textovém tvaru. OKDUMP je určen ke zkoumání obsahu a struktury libovolných počítačových souborů včetně netextových, které by při přímém odeslání na monitor nebo tiskárnu vypadaly jako změť nesmyslných znaků.

Stručná charakteristika

Syntaxe

Názvy vstupního a výstupního souboru se zadávají v tomto pořadí jako parametry příkazu OKDUMP. Cestu k souborům není nutné uvádět, pak se pracuje v aktuálně nastaveném adresáři. Dlouhé názvy souborů nejsou podporovány. Pokud výstupní soubor již existuje, bude obsluha varována dotazem Výstupní soubor už existuje. Přepsat (A/N) ? Tento interaktivní dotaz lze potlačit parametrem /O.

Nebudou-li názvy souborů zadány, OKDUMP pracuje jako filtr, tzn. čte soubor ze systémového vstupu a po zformátování jej zapisuje na systémový výstup. Pokud je na příkazové řádce zadán jen jeden soubor, považuje se za vstupní a výsledek jde na systémový výstup. Následující příkazy jsou tedy funkčně shodné:

OKDUMP  vstup.exe  vystup.txt
OKDUMP <vstup.exe >vystup.txt

Při použití přesměrovacích operátorů < a > je třeba případné doplňující parametry programu OKDUMP zadávat před zapsáním prvního přesměrování. Pozor také na to, že při přesměrování výstupu do již existujícího souboru se žádné varovné upozornění nevydává.

Parametry programu OKDUMP začínají lomítkem, za kterým následuje rozlišující písmeno (na velikost se nehledí). Případné další znaky až do dalšího lomítka jsou ignorovány. Některé parametry vyžadují zadání hodnoty, například za parametrem /H= se očekává počáteční pozice v souboru, od které se začne vypisovat. Číselné parametry lze zadávat dekadicky nebo hexadecimálně, oddělovací rovnítko není povinné. Všech pět následujících příkladů zadání číselného parametru je syntakticky správných a významově shodných:

 /Header=172813   /h172813   -hlavička: 72813   -h0x2A30D    /H2A30Dh
Uvnitř čísla nesmějí být nečíselné znaky (žádné oddělovací mezery). U znakových parametrů přistupuje možnost jejich specifikace zadáním znaku v uvozovkách nebo apostrofech, např. /Y="*". Namísto lomítek mohou parametry začínat i znakem minus.

Při zapsání nedefinovaného parametru, např. /?, se vypíše stručný přehled povolených parametrů. Povelem OKDUMP /P se na systémový výstup vypíše tento podrobný popis programu.

Rozsah dat

OKDUMP normálně vypisuje celý vstupní soubor, někdy je ale užitečné se omezit pouze jeho výsek. Parametry /H= a /F= proto lze vymezit počáteční a koncovou adresu v rámci vstupního souboru, kterou chceme vypsat. První parametr určuje počet bajtů vstupu, které se mají vynechat, implicitní hodnota /H=0. Druhý parametr /F= udává adresu, kde má být výstup ukončen. Implicitní hodnotou /F= je délka souboru. Chceme-li tedy pouze prvních 256 bajtů souboru, zadáme parametr /F=256. Pokud by nás zajímalo např. jen posledních deset znaků souboru dlouhého 12345678, stačí zadat /H=12345668.

Struktura výpisu

Vstupní soubor se rozdělí na malé porce, typicky po 16 bajtech, které se zformátují do jednoho řádku výstupního souboru. Řádek obsahuje adresu, za ní hexadecimálně vypsaná data a zcela vpravo jsou tatáž data vypsána přímo jako text převedený do kódové stránky výstupního zařízení, tj. monitoru nebo tiskárny.

Alternativně lze textová data zobrazovat také nad příslušným hexadecimálním vyjádřením (parametr /R). V takovém případě se ušetří místo v pravém sloupci, ale výpis zabere dvojnásobný počet řádků. Výpis textové formy informace lze zcela potlačit uvedením parametru /Q, např. u čistě binárních dat neobsahujících čitelné textové řetězce. Rovněž adresní sloupec můžeme vypustit pomocí parametru /@.

Před vlastní výpis se přidává tirážní řádek obsahující datum a čas tisku, název vstupního souboru a nepovinnou textovou poznámku, kterou zadáváme pomocí parametru /". Text poznámky musí být ukončen druhým výskytem uvozovky. Například zadáním příkazu

 okdump /2 Keyboard.drv /f20h /"Začátek ovladače"
dostáváme na standardní výstup tuto informaci:
26.08.2000  21:15     OKDUMP Keyboard.drv     Začátek ovladače
 
0000: 4D5A 7D00 0200 0000 | 0400 0700 FFFF 0000 |MZ}.........  ..|
0010: B800 0000 0000 0000 | 4000 0000 0000 0000 |Ø.......@.......|
Parametrem /N lze tirážní řádek s datumem potlačit.

Před zahájením výpisu se na standardní služební výstup (StdErr) zobrazuje informace o názvu vstupního a výstupního souboru, jejich kódování a o celkové šířce zvoleného formátu. Po ukončení výstupu se ještě zobrazí souhrnný počet zpracovaných bajtů a počet řádků výpisu. Toho můžeme využít k hrubému odhadu spotřeby papíru, pokud nejprve přesměrujeme OKDUMP do >NUL. Také tyto pomocné informace lze zakázat parametrem /N.

Formát adresy

Výstupní řádek začíná jeho adresou v rámci souboru, za níž následuje oddělovací dvojtečka. První řádek tedy má adresu 0:, druhý adresu 16: atd. Implicitně se ale adresa zobrazuje hexadecimálně, požadujeme-li dekadický formát, je třeba uvést parametr /U. Počet číslic adresy se zadává za parametrem /T=, maximum je 10 cifer, default=8. Dojde-li v průběhu vypisování k přetečení adresy, výpis normálně pokračuje od nuly dál.

Někdy je výhodné, pokud adresní údaj zobrazuje jinou hodnotu, než odpovídá pozici v souboru. Například dosové spustitelné soubory v COM formátu jsou nahrávány na adresu o 256 bajtů vyšší. Aby údaj v adresním sloupci lépe korespondoval s pozicí zobrazovaných dat v rámci segmentu, lze pomocí parametru /+ zadat posun adresy. Číslo zadané za parametrem /+ se přičítá k adresnímu údaji před jeho zobrazením.

Je-li uveden parametr /@, adresa se vůbec nezobrazuje a výpis začíná přímo hexadecimálními daty v prvním sloupci.

Formát hexadecimálního výpisu

Každý bajt je vypsán dvojicí hexadecimálních číslic 0..9,A..F. Pro lepší přehlednost může za každou dvojicí následovat oddělující mezera, ale pro úsporu místa se často některé mezery vynechávají a více bajtů je spojeno do tzv. slova. Skupiny slov tvoří sloupec. Je-li sloupců víc, opticky se oddělují mezerou navíc, případně i volitelným oddělovacím znakem.

Počet bajtů, slov a sloupců lze nastavit volbami /B=,/S= a /C=, oddělovací znak se zadává parametrem /Y=. Implicitní hodnota /Y=0, což znamená, že není použit. Součin hodnot parametrů /B=,/S= a /C= udává počet znaků vypsaných na jednom řádku a tím určuje i šířku výpisu. Minimální hodnota je 1, shora je omezena pouze celkovou šířkou formátovaného výpisu, která nesmí překročit 65535. V praxi jsme ovšem mnohem dříve omezeni možnostmi zařízení, na které je výpis směrován.

Ukázka dvouřádkového výpisu: Formátovací parametry

Formát textové části

V posledním sloupci jsou znaky vypsány v textové formě. Aby případný výskyt řídicích znaků nezpůsoboval zmatek při tisku, jsou všechny netisknutelné symboly zobrazovány v podobě tečky, případně i jiného vhodného znaku zvoleného pomocí parametru /Z=.

Namísto v samostatném textovém sloupci můžeme nechat textovou podobu znaků zobrazovat nad odpovídajícím hexadecimálním vyjádřením (/R) nebo ji zcela vynechat (/Q).

OKDUMP provádí konverzi kódu pro výpis textové formy. Obsahuje-li vstupní soubor např. české výrazy v kódování Windows a tiskneme-li na tiskárnu nastavenou na kódovou stránku Latin 2, zadáme vstupní a výstupní kód (v tomto pořadí) pomocí dvojice parametrů /W /L. Nebude-li zadán druhý (výstupní) kód, převádí se do aktuálního OEM kódování /Kamenických nebo /Latin2 detekovaného ve VGA monitoru. Pokud není zadán ani jeden kód, nic se nekonvertuje. I v případě, že tiskárna vůbec diakritiku netiskne, je vhodné texty překódovat, neboť se pak vytisknou aspoň odpovídající písmena bez diakritických znamének a text je čitelnější. Hexadecimálně vypsané znaky samozřejmě nejsou překódováním nijak ovlivněny.

Kódové stránky lze vybírat z těchto možností:
/ASCII 7bit bez diakritiky
/ISO-8859-2, tzv.ISO Latin2 používaná v Unixu, OS/2, na webu
/Kamenických - populární kódování v MS-DOSu
/Macintosh Central Europe instalovaná v systémech Apple Computer
/Latin 2 CP852 implicitně instalovaná do DOSu v systémech Microsoftu a IBM
/Windows CP1250 - používaná v Microsoft Windows
/DOS-OEM kompromis mezi /K a /L, obsahuje diakritiku pouze u písmen áäÄéÉíóôöÖúüÜ, což vyhovuje např. pro tiskárny s IBM kódovou stránkou CP437

Předvolené formáty

OKDUMP umožňuje poměrně detailně definovat formát výpisu pomocí mnoha parametrů. Několik vhodných kombinací formátovacích parametrů je již v programu vestavěno v podobě zkrácené volby /0, /1 až /9. Seznam předvolených formátů ze zobrazí na povel OKDUMP /X:

Předvolba  šířka výpisu     nahrazuje parametry

 /1          78                /C=2 /S=8 /B=1 /T=8 /Y="|"
 /2          66                /C=2 /S=4 /B=2 /T=4 /Y="|"
 /3          72             /R /C=1 /S=1 /B=32/T=6 /Y=0
 /4          77             /Q /C=1 /S=8 /B=4 /T=4 /Y=0
 /5          79             /U /C=4 /S=1 /B=5 /T=5 /Y="!"
 /6          78          /@ /R /C=1 /S=1 /B=39
 /7         123                /C=2 /S=8 /B=2 /T=5 /Y="|"
 /8         142             /R /C=4 /S=1 /B=16/T=6 /Y=0
 /9         160                /C=3 /S=1 /B=16/T=5 /Y="|"
 /0        neomezená     /@ /Q /C=1 /S=1 /B=neomezeno
 /=  neformátovaná kopie bez konverze kódu s respektováním /Head= a /Foot=

Výskyt parametru /1 na příkazovém řádku tedy nahrazuje zadání pěti parametrů:
/C2 /S8 /B1 /T8 a /Y124. Formáty /7,/8,/9 jsou určeny pro tiskárny s širokým válcem, popř. přepnuté na kondenzované písmo. Předvolby /0 a /= jsou speciální: Při formátu /0 vystupují pouze hexadecimální ekvivalenty vstupních dat a nic jiného (ani konce řádek). Výstup je tedy dvojnásobně delší než vstupní soubor. Je-li zadán parametr /=, všechny formátovací a překódovací parametry se ignorují a výstup přímo kopíruje vstupní data. To může být užitečné, pokud potřebujeme nějak zpracovat jen část vstupního souboru vymezenou parametry /H= a /F=.

Kondenzace výpisu

Obsahuje-li vstupní soubor velké bloky opakujících se dat, pravděpodobně se ve výpisu budou opakovat shodné řádky. Obvykle je zbytečné, aby se opakovaně tiskly, proto OKDUMP detekuje případy, kdy z něj vystupují více než tři totožné řádky po sobě. V takovém případě vypíše pouze první a poslední a mezi ně vloží informaci o počtu vynechaných shodných řádků. Adresní část se ovšem porovnání nezúčastňuje, neboť adresní údaj se mění vždycky. Pokud by vynechávání shodných řádků vadilo, lze je vypnout parametrem /V.

Poněkud opačně funguje parametr /E, který za každý řádek výpisu vloží dvojici řídicích znaků CR+LF navíc a tím způsobí vynechání jednoho prázdného řádku. Tím získáváme více prostoru pro ruční vpisování poznámek do vytištěného dumpu.

Abecední přehled parametrů

/A kódování ASCII 7bit
/B= počet bajtů v hexadecimálním slově
/C= počet sloupců hexadecimálního výpisu
/D kódování DOS CP437
/E vkládat do výpisu prázdné řádky
/F= koncová adresa
/H= počáteční adresa
/I kódování ISO-8859-2
/K kódování Kamenických
/L kódování PC Latin 2 CP852
/M kódování Macintosh
/N nevypisovat služební informace
/O nežádat o povolení přepsání existujícího výstupního souboru
/P vypsat podrobnější manuál programu OKDUMP
/Q nevypisovat text
/R text vypisovat nad hexadecimálním výpisem
/S= počet hexadecimálních slov v jednom sloupci výpisu
/T= počet cifer adresního sloupce
/U adresy vypisovat dekadicky
/V nevynechávat shodné řádky výpisu
/W kódování Windows CP1250
/X přehled předvolených formátů
/Y= znak pro optické oddělení sloupců
/Z= náhradní znak za netisknutelný symbol
/+= ofset adresy
/@ nevypisovat adresní sloupec
/= pouze kopírovat vstup na výstup bez formátování
/"komentář na titulním řádku"
/0..9 předvolba formátu

Implicitní hodnoty parametrů:

OKDUMP /B=1 /C=2 /H=0 /S=8 /T=8 /Y=0 /Z='.' /+=0