Cocos2d-x使用Luajit将Lua脚本编译成bytecode,启用加密

本文详细介绍了如何使用Lua脚本进行加密,并通过LUAJIT编译器在Cocos2D-X环境中实现加密脚本的兼容性。包括从创建Lua脚本、编译成字节码到在Cocos2D-X项目中应用的过程,以及遇到问题及解决方案。特别强调了不同编译器对Lua字节码的兼容性问题,并提供了解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目要求lua加密脚本,有关调查的相关信息 ,学习lua自己可以使用luac编译成字节码脚本(bytecode)启用加密,我试了一下。确实是可行。

以下是本机lua编译字节码解释器:

1、创建一个名为1.lua文件,只有一个字print("Hello Lua"),新建一个空的out.lua脚本文件

2、開始--执行--cmd

3、luac -o out.lua 1.lua

注: luac -o [编译后脚本名] [脚本名],必要时带上脚本路径,如:


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


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



重点:

做完了以上的一系列之后,我照着这种方法编译项目中的脚本。然后在cocos2dx环境下使用,发现不行。于是又查了一下资料。发现2dx使用的是luajit,lua原生编译出来的bytecode和luajit是不兼容的。所以照着上面方法编译出来的bytecode脚本无法在2dx中使用。

解决问题事实上非常easy,就是用2dx自带的luajit编译lua脚本,以下附上luajit编译bytecode的方法:

1、在cocos2d-x-2.2.3\scripting\lua\luajit\LuaJIT-2.0.1\src文件夹下有个msvcbuild.bat批处理文件。须要先把luajit.exe这个东西给编译出来。

2、打开visual studio的命令行工具。这个仅仅要装了vs都会有,在安装文件夹里面能够找到。

3、用vs的命令行工具cd到luajit的src文件夹

4、运行msvcbuild.bat批处理文件,编译出luajit.exe


编译完毕之后,会在src文件夹下生成一系列文件。当中有一个luajit.exe


接下来就能够使用luajit.exe编译lua脚本的bytecode了:luajit -b [脚本名] [编译后的脚本名]。运行完后会在src文件夹下生成一个已经编译成bytecode的jit.lua文件



以下把编译之后的jit.lua放在2dx中试一下,以HelloLuaproject为基础,把jit.lua放到\samples\Lua\HelloLua\Resources下。改动AppDelegate.cpp中的lua调用为std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("jit.lua");

执行结果为:


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

严重注意:样例中,我把编译前后的脚本名字取的不一样,是为了让大家看出差异化来。实际在项目中使用的时候,脚本的名字编译前后最好都一致,不然在脚本中相互require的时候可能会出现故障。


一个一个转换脚太麻烦了。分享一个bat批处理,能够批量转换一个目录中的全部lua文件(此目录中仅仅能包括lua文件)
@echo off
if exist out rd /s /q out
mkdir out
:input
cls
set input=:
set /p input= 拖入要编译的lua目录:
set "input=%input:"=%"
if "%input%"==":" goto input
if not exist "%input%" goto input
for %%i in ("%input%") do if /i "%%~di"==%%i goto input
pushd %cd%
cd /d "%input%">nul 2>nul || exit
set cur_dir=%cd%
popd
set /a num = 0
for /f "delims=" %%i in ('dir /b /a-d /s "%input%"') do (set /a num += 1 & luajit -b %%~fsi out/%%~nxi & echo %%~nxi)
echo 编译脚本数量:%num%
ATTRIB out/*.* +R
pause

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


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


版权声明:本文博客原创文章,博客,未经同意,不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值