我正在尝试用 C 实现一个 jvm,只是为了好玩。首先,我尝试解析 .class 文件。我写了一个简单的功能:
FILE *fp = fopen("Add.class", "rb");
int c;
while((c = getc(fp)) != EOF) {
putchar(c);
}
如您所见,该函数可以解析文件,但以字符形式解析。 当我尝试使用
printf("%x")
而不是 putchar
打印文件时,我无法获得任何有意义的输出。
文件的 hexdump 如下所示:
0000000 feca beba 0000 3700 0f00 000a 0003 070c
0000010 0d00 0007 010e 0600 693c 696e 3e74 0001 ...
我的实现打印:
����7
<init>()VCodeLineNumberTableadd(II)I
SourceFileAdd.java
Addjava/lang/Object!*�� �
我猜 putchar 得到的是原始二进制格式,但我想像 hexdump 那样把它变成十六进制来进行解析。
我怎样才能在 C 中实现这个?