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ů.
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 /H2A30DhUvnitř čí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.
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.
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.
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.
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: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
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=.
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.
Implicitní hodnoty parametrů:
OKDUMP /B=1 /C=2 /H=0 /S=8 /T=8 /Y=0 /Z='.' /+=0