2011-08-12 23 views
1

我正在嘗試創建一個閉源lua文件,並且要這樣做,我承擔了一個風險,那就是他們正確的頭腦中沒有人需要很長時間才能轉換(它是某種形式的程序集),無論string.dump返回什麼。從string.dump中刪除源塊返回值

但是,string.dump也有一個字符串塊,它返回的代碼的完整源代碼被它轉儲。不管我做什麼,我似乎都無法創建一個自動的源代碼刪除器,將源代碼從返回的字符串中刪除 - 它似乎沒有按原樣傳遞,我不知道它是否刪除我的縮進,新的線條,空格,或者它在某些條件下或某些條件下刪除某些內容。

所以基本上;說我有

local a = string.dump(function() print("Hello world") end) 

一個會是這樣的:

LuaQ(源)

但(我想保持這使得它工作,我猜的東西)我想刪除源塊,但是即使我傳入相同的源代碼來查找,string.find也不會找到它。

如果我哪裏不清楚,請說。

回答

3

看看LuaC的來源。我相信你所看到的僅僅是調試信息,LuaC可以選擇從生成的字節碼中去除調試信息。你可以看看它是如何做到的。

也就是說,字符串文字將始終在程序的字節碼中可見,因爲Lua將它們作爲純文本存儲在字節碼中。

+0

哦,所以它使用它來知道如果/當它出錯時應該提供哪些錯誤?如果我刪除了它,它會繼續運作嗎?如果我刪除它,那麼信息源將不再存在,是對的,還是我誤解了你所說的內容? –

+0

@Ashley是的,它可能用它來顯示發生錯誤的行。 Lua在生成的字節碼中存儲文件校驗和和大小,並在運行字節碼之前檢查它們是否有效,所以不,我不認爲如果你手動從字符串中刪除它,它仍然可以工作。但是人們可能不會從'string.dump'中取出某些東西,並嘗試用lua來運行它,所以這取決於你。我想你可以給他們一個空的字符串,這也不會造成任何傷害,但這取決於你。 –

+0

因此,無論我做什麼,我都需要以某種形式或形式釋放源代碼?感謝您的幫助。 –

2

之後a=string.dump(function() print("Hello world") end),a確實不是包含該函數的源代碼。它包含函數中的字符串。雖然。但是,您可能使用的是loadstring,默認情況下會將完整的字符串添加爲塊的名稱。改爲嘗試loadstring(source,"=")

+0

是的,我正在使用loadstring。第二個參數是做什麼的? –

+2

第二個參數給出出現在錯誤消息中的塊的名稱。 – lhf