User Tools

Site Tools


how_20to_20display_20a_20hex_20dump_20of_20memory_20contents

How to display a hex dump of memory contents

by Jon Ripley, May 2011

It is useful sometimes to be able to list the contents of a block of memory to examine it. This may be to help debug a problem, examine binary data in memory or one of many other uses.

The easiest way to achieve that is probably to use the supplied Memory Monitor add-in utility, which optionally displays the contents of a block of memory in hexadecimal and ANSI (commonly known as a hex dump).

However if you want to achieve a similar effect in your own program you can use PROCm_Dump below; it accepts four parameters:

        PROCm_dump(block%, size%, items%, verbose%)

Here block% should point to the memory to list, size% is the size in bytes, items% is the number of bytes to display on each line – typically 16 – and verbose controls whether a header is printed.

In the example below we reserve 16 bytes of memory, write a message into the memory and call PROCm_dump to display a hex dump of the memory:

        DIM a 15
        $$a="Hello world!"
        PROCm_dump(a, 16, 8, TRUE)

The ouput of the code is as follows:

Address  : 00 01 02 03 04 05 06 07 :
04421AA1 : 48 65 6C 6C 6F 20 77 6F : Hello wo
04421AA9 : 72 6C 64 21 00 00 00 00 : rld!....

Here is the code for PROCm_dump:

        DEF PROCm_dump(P%,L%,S%,F%)
        LOCAL I%,J%,K%
        FOR I%=0 TO L%-1 STEP S%
          IF I%MOD(S%*16)=0 IF F% THEN
            PRINT '"Address  :";
            FOR J%=0 TO S%-1
              PRINT " ";FNh0(J%,2);
            NEXT J%
            PRINT " :"'
          ENDIF
          PRINT FNh0(P%+I%,8)" :";
          FOR J%=0 TO S%-1
            K%=?(P%+I%+J%)
            IF P%+I%+J%<P%+L% THEN
              PRINT " ";FNh0(K%,2);
            ELSE
              PRINT "   ";
            ENDIF
          NEXT J%
          PRINT " : ";
          FOR J%=0 TO S%-1
            K%=?(P%+I%+J%)
            IF K%<32 OR K%>126 K%=ASC"."
            IF P%+I%+J%>=P%+L% K%=ASC" "
            VDU K%
          NEXT J%
          PRINT
        NEXT I%
        ENDPROC
 
        DEF FNh0(N%,L%)
        =RIGHT$(STRING$(L%,"0")+STR$~N%,L%)
This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information
how_20to_20display_20a_20hex_20dump_20of_20memory_20contents.txt · Last modified: 2018/04/17 16:37 by tbest3112