• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

转自:http://www.58player.com/blog-2537-87218.html

        项目要求对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中使用。 
        解决这个问题其实很简单,就是用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中试一下,以HelloLua工程为基础,把jit.lua放到\samples\Lua\HelloLua\Resources下,修改AppDelegate.cpp中的lua调用为std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("jit.lua"); 
        运行结果为: 

        至此,luajit编译bytecode加密已完成! 
        附上一个build.bat批处理,它可以批量编译整个文件夹内的lua脚本并放在src/out目录下,注意文件夹内不能有其他非lua脚本的文件,且这个批处理只能放在luajit的src目录下,因为它需要依赖这个文件夹下面的诸多文件。 

@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

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
cpgf如何实现lua script binding的?发布时间:2022-07-22
下一篇:
(转) Lua string 操作函数发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap