Previous: The mpedit command, Up: Utilities

9.5 The hexwords command

The final utility program that is provided is called hexwords, which is used to generate hexadecimal constants from a dictionary of known words. Such numerical constants can be used in source files for a variety of debugging problems, and problems with uninitialised variables are especially relevant since these special numbers will stand out if seen from within a debugger. For example, here are some common (and some not-so-common) 32-bit hexadecimal constants that can be used as debugging aids:

word hex constant
addedbad 0xaddedbad
allocate 0xa110ca7e
badlabel 0xbad1abe1
baseball 0xba5eba11
codebabe 0xc0debabe
codedbad 0xc0dedbad
deadbeef 0xdeadbeef
deadcode 0xdeadc0de
failsafe 0xfa115afe
feedface 0xfeedface
freedata 0xf4eeda7a
goodcode 0x600dc0de

As can be seen above, many decimal digits can be used to represent the letters that they most closely resemble, along with the hexadecimal digits `A' through `F'. This provides a much larger selection of words that can be matched, although the digits `3' and `8' cannot be used due to the lack of any similar-looking letters. The digits and their corresponding letters are given in the following table.

digit letter
`0' O, o or Q
`1' I, i or l
`2' Z or z
`3' -
`4' q or R
`5' S or s
`6' G
`7' J or T
`8' -
`9' g
`A-F' A-F
`a-f' a-f

The argument to hexwords must be a valid dictionary filename but if it is omitted then hexwords will use /usr/dict/words as the name of the dictionary file to use. If that cannot be found then hexwords will try /usr/lib/dict/words and /usr/share/dict/words. The dictionary file must be a plain text file that contains one word per line, otherwise few to no words will be matched.

The words that are matched from the dictionary file can be controlled by using the --match option, which sets the type of case-sensitivity to use. A setting of `exact' performs a case-sensitive comparison of all of the words in the dictionary file and the hexadecimal digits, whereas a setting of `any' does not. The `lower' and `upper' settings convert the words in the dictionary file to lower and upper case respectively before performing a case-sensitive comparison. The default case-sensitivity is `exact'.

The minimum and maximum number of letters that are matched are controlled by the --minimum and --maximum options. None of the hexadecimal numbers displayed will have any less or more digits that those specified with these options. The default minimum is `4' digits and the default maximum is `8' digits. Note also that the hexwords command supports the --help and --version options in common with the other mpatrol command line tools.

The hexwords command currently makes use of several UNIX text processing commands in order to extract the words and their hexadecimal equivalents. As a result, the hexwords command is only likely to work on UNIX platforms or on systems which have the necessary commands installed.