2009-09-19 43 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

相關問題