XINU
debug.c
Go to the documentation of this file.
1 
5 #include <xinu.h>
6 #include <stdio.h>
7 #include <debug.h>
8 
9 // ByteをASCIIか16進数でSTDOUT(標準出力)に出力するhexdump_print()の宣言
10 static void hexdump_print(byte, byte);
11 
19 static void hexdump_print(
20  byte data, /* Item to print */
21  byte mode /* ASCII or hex mode */
22 )
23 {
24  switch (mode)
25  {
26  case DEBUG_ASCII:
27  data = (' ' <= data && data <= '~') ? data : '.';
28  fprintf(stdout, "%c", data);
29  break;
30  case DEBUG_HEX:
31  fprintf(stdout, "%02x ", data);
32  break;
33  default:
34  break;
35  }
36 }
37 
54 void hexdump(void *buffer, uint32 length, bool8 canon)
55 {
56  uint32 m, n, remain;
57 
58  byte *b = (byte *)buffer;
59 
60  for (n = 0; n < length; n += 0x10)
61  {
62  fprintf(stdout, "%08x ", (uint32)buffer + n);
63 
64  remain = length - n;
65 
66  for (m = 0; m < remain && m < 0x10; m++)
67  {
68  if (m % 0x08 == 0)
69  {
70  fprintf(stdout, " ");
71  }
72  hexdump_print(b[n + m], DEBUG_HEX);
73  }
74 
75  /* Pad the rest if needed */
76  if (remain < 0x10)
77  {
78  for (m = 0; m < 0x10 - remain; m++)
79  {
80  if ((0 != m) && (0 == m % 0x08))
81  {
82  fprintf(stdout, " ");
83  }
84  fprintf(stdout, " ");
85  }
86  }
87 
88  if (canon == TRUE)
89  {
90  fprintf(stdout, " |");
91  for (m = 0; m < remain && m < 0x10; m++)
92  {
93  hexdump_print(b[n + m], DEBUG_ASCII);
94  }
95  fprintf(stdout, "|");
96  }
97  fprintf(stdout, "\n");
98  }
99 }
#define DEBUG_ASCII
メモリ内容の出力時にASCIIとして出力する指定
Definition: debug.h:6
unsigned char byte
符号なし8ビット値(unsigned char)
Definition: kernel.h:7
デバッグに用いる定数や関数の宣言
#define DEBUG_HEX
メモリ内容の出力時に16進数として出力する指定
Definition: debug.h:8
全てのシステムヘッダファイルをインクルードする。
#define stdout
Definition: stdio.h:16
void hexdump(void *buffer, uint32 length, bool8 canon)
メモリ内容をダンプする。
Definition: debug.c:54
byte bool8
Boolean値
Definition: kernel.h:36
int data
データセグメントの開始アドレス(リンカが追加する)
#define TRUE
Boolean True(1)
Definition: kernel.h:65
static void hexdump_print(byte, byte)
ByteをASCIIか16進数でSTDOUT(標準出力)に出力する。
Definition: debug.c:19
int32 fprintf(int, char *,...)
Definition: fprintf.c:14
unsigned int uint32
符号なし32ビット整数(unsigned int)
Definition: kernel.h:15