lua52編譯
⑴ LUA怎麼像C語言一樣編譯生成可執行文件
下載源代碼,解壓。
解壓後,包含文件:
1、doc 文件夾,lua的更新說明,網頁格式
2、src 文件夾,lua的源文件,C語言實現
3、Makefile , 編譯用配置文件,我們這里就不用它了
4、README , 不用我說了吧,就一說明文件,我們也用不著
進入src文件夾,新建一個文本文件。並改名為vslua.bat,提示是否更改後綴名,選擇是並點擊。
右鍵我們建立的vslua.bat文件,以記事本打開
編寫如圖代碼,為了鍛煉大家的動手能力,加深理解,我就直接上圖不打文字。反正一定能看清的。記得編寫後保存哦!
到開始菜單選擇vs的開發人員命令提示工具。
在命令工具中輸入:
1、「cd x:\你的src文件夾路徑\src」[不包含引號],回車
2、「vslua.bat」 回車
等待執行結束。如果不錯的話,你到src上級目錄就能發現新生成了一個bin文件夾。文件夾裡面放的就是生成好的exe、lib、dll。
最後測試一下新生成的lua.exe。
⑵ 怎樣把.lua編譯成.exe可執行文件(詳細點!最好附圖)
常見的方法是用c寫一個宿主
或者 比較方便而且比較現成的方法是載一個luaaio
aio就是all in one 的縮寫
把lua.exe改成腳本入口lua文件名
比如 main.lua 對應的就是main.exe 然後准備好相應的擴展需要的dll 就可以運行了
⑶ Lua是什麼編程語言
Lua 是一個小巧的腳本語言。 其設計目的是為了嵌入應用程序中,從而為應用程序提供靈活的擴展和定製功能。Lua由標准C編寫而成,幾乎在所有操作系統和平台上都可以編譯,運行。Lua並沒有提供強大的庫,這是由它的定位決定的。Lua 有一個同時進行的JIT項目,提供在特定平台上的即時編譯功能。
Lua腳本可以很容易的被C/C++代碼調用,也可以反過來調用C/C++的函數,這使得Lua在應用程序中可以被廣泛應用。不僅僅作為擴展腳本,也可以作為普通的配置文件,代替XML,ini等文件格式,並且更容易理解和維護。 Lua由標准C編寫而成,代碼簡潔優美,幾乎在所有操作系統和平台上都可以編譯,運行。一個完整的Lua解釋器不過200k,在目前所有腳本引擎中,Lua的速度是最快的。
⑷ lua 怎麼反編譯
lua源文件--obfuscate-->lua源文件(混淆後)--compile-->luac文件(帶調試用的變數名和行號)--strip-->luac文件(不帶調試信息)
lua/luac--加密/打包-->數據文件
數據文件--解包/解密-->lua/luac-->lua虛擬機
1. 跟蹤,脫殼,解包,解密,獲得 luac
追 luaL_loadbuffer luaL_loadfile lua_load 應該可以找到 解密函數。
hook 這3個函數,導出解密後的數據,直接就是 luac 文件。如果沒編譯甚至是 lua源文件。
hook luaV_execute 可以拿到 Proto* ,想辦法用 luaU_mp 導出。luaD_precall 應該沒必要搞。
2. 非標准 luac 處理
我們有兩種方案來處理得到的 luac
1. 得到一個能夠執行上述非標 luac 的 lua 版本
搞清楚編譯方式,改 lua 源文件,編譯出一個,這樣做什麼都可以,還能編譯出對應的 luadec 。
如果能找到 lua51.dll 之類的就直接調用吧。但是,只能用於導出 luac 對比文件格式,或者執行找到的幾個關鍵函數。
2. 將非標 luac 轉換成標准格式 luac,正所謂:山不來就我,我便去就山
非標准 luac 是怎麼做的:
1. bad header 改文件頭
#define LUA_SIGNATURE "\033Lua" // lua.h
2. bad header 改數據類型
// luaconf.h
#define LUA_NUMBER_DOUBLE
#define LUA_NUMBER double
LUA_NUMBER to float
LUA_NUMBER_SCAN to "%f"
LUA_NUMBER_FMT to "%.7g"
l_mathop(x) to (x##f)
lua_str2number to use strtof
3. bad code OpCode 重定義
// 改有 "ORDER OP" 的地方
/* grep "ORDER OP" if you change these enums */
enum OpCode; // lopcodes.h
const lu_byte luaP_opmodes[]; // lopcodes.c
const char *const luaP_opnames[]; // lopcodes.c
⑸ 如何把lua編譯成luac
不是在lua解釋器里用的……
命令行下luac 文件名
你這樣等於是試圖解釋lua語句luac.exe asd.lua,同時提供兩個table的鍵值,自然非法