11 typedef unsigned char uint8_t;
12 typedef unsigned uint32;
14 void dump_data(int level, const char *buf1,int len)
16 #define DEBUGADD(lvl, x) printf x
17 #define MIN(a,b) ((a)<(b)?(a):(b))
18 void print_asc(int level, const uint8_t *buf,int len) {
21 DEBUGADD(level,("%c", isprint(buf[i])?buf[i]:'.'));
23 const uint8_t *buf = (const uint8_t *)buf1;
28 DEBUGADD(level,("[%06X] ",i));
30 DEBUGADD(level,("%02X ",(int)buf[i]));
32 if (i%8 == 0) DEBUGADD(level,(" "));
34 print_asc(level,&buf[i-16],8); DEBUGADD(level,(" "));
35 print_asc(level,&buf[i-8],8); DEBUGADD(level,("\n"));
36 if (i<len) DEBUGADD(level,("[%06X] ",i));
42 DEBUGADD(level,(" "));
43 if (n>8) DEBUGADD(level,(" "));
44 while (n--) DEBUGADD(level,(" "));
46 print_asc(level,&buf[i-(i%16)],n); DEBUGADD(level,( " " ));
48 if (n>0) print_asc(level,&buf[i-n],n);
49 DEBUGADD(level,("\n"));
53 static void *map_file(char *fname, size_t *size)
55 int fd = open(fname, O_RDONLY);
60 p = mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
67 int main(int argc, char *argv[])
72 p = map_file(argv[1], &size);
74 dump_data(0, p, size);