在 C 中解析 Java 字节码(.class 文件)

问题描述 投票:0回答:0

我正在尝试用 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 中实现这个?

java c jvm bytecode
© www.soinside.com 2019 - 2024. All rights reserved.