1 /* $OpenBSD: hexdump.c,v 1.1 2019/11/28 00:17:13 bluhm Exp $ */ 2 /* 3 * Copyright (c) 2019 Alexander Bluhm <bluhm@openbsd.org> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #include <sys/types.h> 19 20 #include "stand.h" 21 22 void 23 hexdump(const void *addr, size_t size) 24 { 25 const unsigned char *line, *end; 26 int byte; 27 28 end = (const char *)addr + size; 29 for (line = addr; line < end; line += 16) { 30 printf("%08lx ", line); 31 for (byte = 0; byte < 16; byte++) { 32 if (&line[byte] < end) 33 printf("%02x ", line[byte]); 34 else 35 printf(" "); 36 if (byte == 7) 37 printf(" "); 38 } 39 printf(" |"); 40 for (byte = 0; byte < 16; byte++) { 41 if (&line[byte] < end) { 42 if (line[byte] >= ' ' && line[byte] <= '~') 43 printf("%c", line[byte]); 44 else 45 printf("."); 46 } else 47 break; 48 } 49 printf("|\n"); 50 } 51 printf("%08lx\n", end); 52 } 53