Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密

项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua自己可使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行。
下面是使用原生的lua解释器编译字节码:
一、新建一个名为1.lua的文件,里面只有一句话print("Hello Lua"),新建一个空的out.lua脚本文件
二、开始--运行--cmd
三、luac -o out.lua 1.lua
注: luac -o [编译后脚本名] [脚本名],必要时带上脚本路径,如:php

 

回车以后,再打开out.lua就能够看到编译好的字节码了工具

而后实验一下,执行这个字节码脚本,能够看到lua原生的解释器能够直接解析luac编译出来的bytecode脚本,很方便!ui

重点:
作完了以上的一系列以后,我照着这个方法编译项目中的脚本,而后在cocos2dx环境下使用,发现不行!因而又查了一下资料,发现2dx使用的是luajit,lua原生编译出来的bytecode和luajit是不兼容的,因此照着上面方法编译出来的bytecode脚本没法在2dx中使用。
解决这个问题其实很简单,就是用2dx自带的luajit编译lua脚本,下面附上luajit编译bytecode的方法:
一、在cocos2d-x-2.2.3\scripting\lua\luajit\LuaJIT-2.0.1\src目录下有个msvcbuild.bat批处理文件,须要先把luajit.exe这个东西给编译出来。
二、打开visual studio的命令行工具,这个只要装了vs都会有,在安装目录里面能够找到。
三、用vs的命令行工具cd到luajit的src目录
四、执行msvcbuild.bat批处理文件,编译出luajit.exe加密

 

编译完成以后,会在src目录下生成一系列文件,其中有一个luajit.exelua

接下来就可使用luajit.exe编译lua脚本的bytecode了:luajit -b [脚本名] [编译后的脚本名],执行完后会在src目录下生成一个已经编译成bytecode的jit.lua文件spa

 

下面把编译以后的jit.lua放在2dx中试一下,以HelloLua工程为基础,把jit.lua放到\samples\Lua\HelloLua\Resources下,修改AppDelegate.cpp中的lua调用为std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("jit.lua");
运行结果为:命令行

 

至此,luajit编译bytecode加密已完成!code

严重注意:例子中,我把编译先后的脚本名字取的不同,是为了让你们看出差别化来,实际在项目中使用的时候,脚本的名字编译先后最好都一致,否则在脚本中相互require的时候可能会出现问题!blog

 

一个一个转换脚太麻烦了,分享一个bat批处理,能够批量转换一个文件夹中的全部lua文件(此文件夹中只能包含lua文件)ip

 1 @echo off  2 if exist out rd /s /q out
 3 mkdir out
 4 :input  5 cls  6 set input=:  7 set /p input= 拖入要编译的lua文件夹:  8 set "input=%input:"=%"  9 if "%input%"==":" goto input 10 if not exist "%input%" goto input 11 for %%i in ("%input%") do if /i "%%~di"==%%i goto input 12 pushd %cd%
13 cd /d "%input%">nul 2>nul || exit 14 set cur_dir=%cd%
15 popd 16 set /a num = 0
17 for /f "delims=" %%i in ('dir /b /a-d /s "%input%"') do (set /a num += 1 & luajit -b %%~fsi out/%%~nxi & echo %%~nxi) 18 echo 编译脚本数量:%num%
19 ATTRIB out/*.* +R 20 pause

 

---将以上代码copy到文本中,后缀改成bat,放到cocos2d-x-2.2.3\scripting\lua\luajit\LuaJIT-2.0.1\src下

编译后,文件夹内全部的lua脚本将被批量编译为字节码,并保存在LuaJIT-2.0.1\src\out目录下!

注意:在cocos2d-x-3.1.1版本中luajit的路径为:cocos2d-x-3.1.1\external\lua\luajit\src\src。

 

 

原文连接:http://www.cocoachina.com/bbs/read.php?tid=205802

相关文章
相关标签/搜索