2009-09-19 130 views
0

我正在编写自己的字节码和虚拟机(在.NET上),我无法弄清楚的一件事是如何将字符串嵌入到字节码中。任何想法现在我应该怎么做?如何将字符串嵌入到二进制文件中?

+0

它在Java中称为字节码。在.NET中,它是CIL,所以我更新了你的标签。你有没有咨询CIL参考? – 2009-09-19 05:11:17

+0

不,我在.net平台上编写一个程序,该程序将字节数组解释为我自己的字节码自定义风格。 – RCIX 2009-09-19 05:12:41

+0

我想不出的是如何将数字以外的任何东西嵌入到数组中。 – RCIX 2009-09-19 05:14:19

回答

1

显然你正在定义你自己的字节码。这与.NET CIL的语法/语法无关,对吧?

如果是这样,并且您关心的是如何对字符串进行编码(而不是其他指令,如跳转,循环等),那么您可以为它创建自己的“指令”。

例如,十六进制代码“01xx”可以用于包含xx个字节(0 -255)的字符串。然后,您的语言解释器将被教导将该字符串存储在堆栈(或无论哪个)上,并移动以解码位于字节码流下方xx字节的以下字节码。

如果你关心的是如何在你对字节码的任何存储混合字符数据和数字数据,请提供具体细节,也许有人可以帮助...

+0

正确,我正在做我自己的。 我有点得到你说的,但ieach指令在我的字节码中包含4个独立的字节(操作码和其他3个字符,其用途因指令而异),我想避免变长说明。它可以安全地通过在指令本身中编码数据的长度来实现,但它会使它更复杂... – RCIX 2009-09-19 05:39:18

+1

我看到了具有固定长度和格式的字节码的优点。在这种情况下,字符串可能只是作为变量声明(您可能很容易设计)的指令来实现的,其中存储实际字符串的索引(即地址,偏移量,下标...)。与常规变量的不同之处在于,字符串所在的存储区使用字符串值进行初始化。事实上,对于3字节的指令,你可能会发现自己受限于其他类型而不仅仅是字符串(比如说如何编码一个大于8百万的数字值? – mjv 2009-09-19 05:51:35

+0

这是另一件我有点困惑的事情......但我可能只是继续做,谢谢! – RCIX 2009-09-21 05:47:15

0

如果你可以在一个阵列存储号码,然后您可以将ASCII数据存储在同一个阵列中。忽略字符串作为类的想法,简单的字符串无论如何只是一个字符数组 - 而在C中,值为0的字节表示字符串的结尾。

举一个简单的验证的概念在C:

int main() 
{ 
    putchar(104); // h 
    putchar(101); // e 
    putchar(108); // l 
    putchar(108); // l 
    putchar(111); // o 
    putchar(10); // \n 
    return 0; 
} 

输出:

 
$ ./a.out 
hello 

也许reference on character arrays as strings将帮助?

+0

这不是那么简单,我试图嵌入字符串与其他字节(这正好是我自己的自定义格式的说明),我不知道如何做到这一点。 – RCIX 2009-09-19 05:52:58

相关问题