A. 如何把lua編譯成luac
不是在lua解釋器里用的……
命令行下luac 文件名
你這樣等於是試圖解釋lua語句luac.exe asd.lua,同時提供兩個table的鍵值,自然非法
B. 如何用 qt Creator 5.0.2 編譯 lua 生產 lua.dll
在win下消讓編譯dll需要做這些事情:
lua的源代兆含碼有三個重要部分:luac.c lua.c 其他c文件
動態鏈接庫。 新建一個 dll 工程。 把除了 luac.c lua.c 的所有c文件加進工程拿猜局。
在 luaconf.h開始加上 #define LUA_BUILD_AS_DLL
然後編譯。
C. 如何在windows下安裝FLANN函數庫
如何搭建
1.生成Lua靜態庫
(1)下載lua src。
最新版本是5.2.3。 下載地址。
(2)新建VS Win32控制台應用程序,取名為Lua。在應用程序設置中選擇應用程序類型為靜態庫,附加選項中取消預編譯頭的勾選。
(3)在Lua的VS項目文件夾中新建LuaSrc目錄,用於存放Lua源碼。解壓下載的lua src,拷貝src目錄下所有 * .c和 * .h文件到LuaSrc。
(4)在Lua的VS項目文件夾中新建bin目錄,用於存放Lua.lib。
(5)在VS環境中,右鍵點擊Lua項目好運,選擇添加->現有項,導入LuaSrc目錄下所有的文件。
(6)右鍵點擊Lua項目,選擇屬性,在頂部選擇所有配置,然後修改配置屬性->常規->輸出目錄為
$(SolutionDir)bin
(7)為了禁止一些安全警告(Windows程序員知道為什麼),需要再修改配置屬性->C/C++–>預處理器->預處理器定義,在鋒腔末尾添加
;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE
(8)選擇release模式,點擊項目,生成Lua.lib即可。Lua.lib生成在bin目錄下。
2.調用Lua靜態庫
(1)在Lua解決方案下新建名字為HelloLua的Win32控制台程序,採用默認選項,不做修改。
(2)右鍵點擊HelloLua項目,選擇屬性,修改配置屬性->C/C++–>附加包含目錄,新增
..\LuaSrc
(3)在修改配置屬性->鏈接器->輸入->附加依賴項,新增
..\bin\Lua.lib
或者使用代碼鏈接lua庫,即在HeloLua.cpp中添加如下代碼,
#pragma comment (lib,"../bin/Lua.lib")
(4)設置HelloLua項目為默認啟動項,點擊生成項目即可。
(5)因為此時main函數並沒有執行任何代碼,所以控制台一閃而過。右鍵HelloLua項目的源文件,添加新建項,取名hellolua.lua。
(6)一個簡單的調用示例:
*hellolua.lua*
print("Hello, Lua")
*HelloLua.cpp*
#include "stdafx.h"
#pragma comment (lib,"Lua.lib")
#include "lua.hpp"
int _tmain(int argc, _TCHAR* argv[])
{
lua_State* lua_state = luaL_newstate();
luaL_openlibs(lua_state);
luaL_dofile(lua_state,"hellolua.lua");
lua_close(lua_state);
getchar();
return 0;
}
效果
3.生成Lua.exe和Luac.exe
由於下載的lua源碼中包含lua.c和luac.c,這兩個文件都有main入口,同時編譯的話會出錯,所以只要刪除其中一個,另一個就可以正常編譯。
(1)新建VS空項目,取名為Lua。
(2)在Lua的VS項友基梁目文件夾中新建LuaSrc目錄,用於存放Lua源碼。解壓下載的lua src,拷貝src目錄下是所有 * .c和 * .h文件。
(3)在VS環境中,右鍵點擊Lua項目,選擇添加->現有項,導入LuaSrc目錄下所有的文件。
(4)右鍵點擊Lua項目,選擇屬性,在頂部選擇所有配置,然後修改配置屬性->C/C++–>預處理器->預處理器定義,在末尾添加
;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE
(5)在Lua項目的源文件,找到luac.c,右鍵移除。
(6)選擇release模式,點擊項目生成lua.exe即可。
(7)同理在同個解決方案下創建LuaC空項目,按以上步驟生成luac.exe。只是第五步要改為「找到lua.c,右鍵移除」。
(8)lua.exe和luac.exe生成在Lua項目目錄下的release目錄。
D. luac文件怎麼進行反編譯
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 "