String 字符串是如何嵌入到二进制文件中的?
我正在写我自己的字节码和虚拟机(在.NET上),有一件事我搞不清楚,那就是如何将字符串嵌入到我的字节码中。你知道我该怎么做吗?显然你在定义自己的字节码。这与.NETCIL的语法/语法无关,对吗 如果是这样,如果您关心的是如何对字符串进行编码(与跳转、循环等其他指令相反),那么您可以为它发明自己的“指令” 例如,十六进制代码“01xx”可以表示包含xx字节(0-255)的字符串。然后,您的语言解释器将被教导将该字符串存储在堆栈上(或任何地方),并对位于字节码流下游xx字节的以下字节码进行解码String 字符串是如何嵌入到二进制文件中的?,string,virtual-machine,bytecode,embedding,String,Virtual Machine,Bytecode,Embedding,我正在写我自己的字节码和虚拟机(在.NET上),有一件事我搞不清楚,那就是如何将字符串嵌入到我的字节码中。你知道我该怎么做吗?显然你在定义自己的字节码。这与.NETCIL的语法/语法无关,对吗 如果是这样,如果您关心的是如何对字符串进行编码(与跳转、循环等其他指令相反),那么您可以为它发明自己的“指令” 例如,十六进制代码“01xx”可以表示包含xx字节(0-255)的字符串。然后,您的语言解释器将被教导将该字符串存储在堆栈上(或任何地方),并对位于字节码流下游xx字节的以下字节码进行解码 如果
如果您关心的是如何在字节码的任何存储中混合字符数据和数字数据,请提供详细信息,也许有人可以提供帮助…如果您可以将数字存储在一个数组中,那么您可以将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
美元/年
你好
也许a会有帮助?它在Java中被称为字节码。在.NET中,它是CIL,所以我更新了您的标记。你查阅过CIL参考资料吗?没有,我正在.net平台上编写一个程序,将字节数组解释为我自己的自定义字节码。我搞不懂的是如何将数字以外的任何东西嵌入到该数组中。没错,我正在制作我自己的。我有点明白你的意思,但我字节码中的每条指令都由4个独立的字节组成(1个用于操作码,3个其他字节,谁的用途随指令而异),我希望避免使用可变长度的指令。通过在指令本身中编码数据的长度可以安全地实现,但这会使它变得更加复杂……我看到了具有固定长度和格式的字节码的优点。在这种情况下,字符串可能只是作为变量声明的指令来实现(您可能已经很容易地设计好了),从而存储实际字符串的索引(无论是地址、偏移量、下标…)。与常规变量的不同之处在于,字符串所在的存储是用字符串值初始化的。事实上,使用3字节指令,您可能会发现自己仅限于字符串以外的其他类型(例如,如何对大于800万的数值进行编码?这也是我有点困惑的另一件事……但我可能会继续这样做。谢谢!这并不是那么简单。我正在尝试用其他字节嵌入字符串(这恰好是我自己自定义格式的指令),我不知道该怎么做。