是否可以更改Lua字節碼中的字符串(內容和大小),以便它仍然正確? 這是關於在Lua字節碼中翻譯字符串的。當然,並不是每種語言的每個單詞都有相同的大小...是否可以在Lua字節碼中更改字符串(內容和大小)以便它仍然正確?
2
A
回答
3
是的,這是如果你知道你在做什麼。字符串以int的大小爲前綴。該int的大小和字節順序是平臺相關的。但爲什麼你必須編輯字節碼?你失去了來源?
0
你可以嘗試使用反編譯器LuaDec。反編譯器將允許在生成的Lua代碼中修改字符串,類似於原始源代碼。
ChunkSpy有A No-Frills Introduction to Lua 5.1 VM Instructions可以幫助你理解編譯後的塊格式並在必要時直接對字節碼進行更改。
1
經過一番跳水throught Lua的源代碼,我發現這樣的解決方案:
#include "lua.h"
#include "lauxlib.h"
#include "lopcodes.h"
#include "lobject.h"
#include "lundump.h"
/* Definition from luac.c: */
#define toproto(L,i) (clvalue(L->top+(i))->l.p)
writer_function(lua_State* L, const void* p, size_t size, void* u)
{
UNUSED(L);
return (fwrite(p,size,1,(FILE*)u)!=1) && (size!=0);
}
static void
lua_bytecode_change_const(lua_State *l, Proto *f_proto,
int const_index, const char *new_const)
{
TValue *tmp_tv = NULL;
const TString *tmp_ts = NULL;
tmp_ts = luaS_newlstr(l, new_const, strlen(new_const));
tmp_tv = &f_proto->k[INDEXK(const_index)];
setsvalue(l, tmp_tv, tmp_ts);
return;
}
int main(void)
{
lua_State *l = NULL;
Proto *lua_function_prototype = NULL;
FILE *output_file_hnd = NULL;
l = lua_open();
luaL_loadfile(l, "some_input_file.lua");
lua_proto = toproto(l, -1);
output_file_hnd = fopen("some_output_file.luac", "w");
lua_bytecode_change_const(l, lua_function_prototype, some_const_index, "some_new_const");
lua_lock(l);
luaU_dump(l, lua_function_prototype, writer_function, output_file_hnd, 0);
lua_unlock(l);
return 0;
}
首先,我們必須開始Lua的VM,並加載我們要修改劇本。編譯與否,無所謂。然後構建一個Lua函數原型,解析並更改它的常量表。將原型轉儲到文件。
我希望你明白了基本的想法。
相關問題
- 1. 是否可以更改UITableView中的字體類型和大小?
- 2. 是否可以更改Lua字節碼中的值?怎麼樣?任何想法?
- 3. 是否可以更改Cocos2d-x中的標籤字體大小?
- 4. 是否可以根據文本字符串更改所選內容?
- 5. WPF:是否可以將路徑大小調整爲佈局大小,但是仍然可以伸展它?
- 6. 如何推廣一個接受`&[T]`的函數,以便我仍然可以用字符串文字調用它?
- 7. 是否可以更改TListView組的字體大小?
- 8. 我可以更改字體大小嗎?
- 9. PHP:是否可以正確SUBSTR UTF-8字符串?
- 10. 大小以字節
- 11. 如何更改此代碼,以便將其寫入字符串?
- 12. Swift:Collection查看未正確調整大小以便更改
- 13. 是否可以將LLVM字節碼轉換爲Java字節碼?
- 14. CryptoStream是否可以返回並且仍然可以正確處理所有內容?
- 15. 是否可以更改查詢字符串值
- 16. Lua字節代碼,大小爲零
- 17. 字體大小可以是css/css3中容器大小的%嗎?
- 18. rel =屬性是否可以包含任何字符串並且仍然有效?
- 19. AS3:ByteArray是否可以將每個unicode字符的內容作爲一個字符串返回兩個字節?
- 20. 在lua中以格式化字符串
- 21. 編碼字符串以便插入SQLite
- 22. java 1.4 -sql server2000:是否可以將文本追加到字符串中的大小在gbs中的字符串
- 23. 確定字符串是否以另一個字符串結尾
- 24. 是否可以放大和縮小div的內容?
- 25. UICollectionView等計算內容大小,以便我可以永久增加它?
- 26. 如何編碼字符串,以便它可以通過http發送?
- 27. XCode 5是否可以更改故事板上的字體和大小?
- 28. 字符串中的xml對象 - 我如何序列化它,以便它可以保持字符串
- 29. 更改文章內容字體大小?
- 30. utf8decode是否可以選擇字符串?
另請參閱http://stackoverflow.com/questions/19242617/is-it-possible-to-change-a-value-inside-a-lua-bytecode-how-any-idea。 – lhf 2014-03-19 00:22:12