Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密
发布时间:2020-12-14 20:34:06 所属栏目:百科 来源:网络整理
导读:项目要求对lua脚本进行加密,查了一下相关的资料,得知lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行。 下面是使用原生的lua解释器编译字节码: 1、新建一个名为1.lua的文件,里面只有一句话print("HelloLua"),新建一个
项目要求对lua脚本进行加密,查了一下相关的资料,得知lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行。
下面是使用原生的lua解释器编译字节码: 1、新建一个名为1.lua的文件,里面只有一句话print("HelloLua"),新建一个空的out.lua脚本文件 2、开始--运行--cmd 3、luac-oout.lua1.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.3scriptinglualuajitLuaJIT-2.0.1src目录下有个msvcbuild.bat批处理文件,需要先把luajit.exe这个东西给编译出来。 2、打开visualstudio的命令行工具,这个只要装了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放到samplesLuaHelloLuaResources下,修改AppDelegate.cpp中的lua调用为std::stringpath=CCFileUtils::sharedFileUtils()->fullPathForFilename("jit.lua"); 运行结果为: 至此,luajit编译bytecode加密已完成! 附上一个build.bat批处理,它可以批量编译整个文件夹内的lua脚本并放在src/out目录下,注意文件夹内不能有其他非lua脚本的文件,且这个批处理只能放在luajit的src目录下,因为它需要依赖这个文件夹下面的诸多文件。 @echooff ifexistoutrd/s/qout mkdirout :input cls setinput=: set/pinput=拖入要编译的lua文件夹: set"input=%input:"=%" if"%input%"==":"gotoinput ifnotexist"%input%"gotoinput for%%iin("%input%")doif/i"%%~di"==%%igotoinput pushd%cd% cd/d"%input%">nul2>nul||exit setcur_dir=%cd% popd set/anum=0 for/f"delims="%%iin('dir/b/a-d/s"%input%"')do(set/anum+=1&luajit-b%%~fsiout/%%~nxi&echo%%~nxi) echo编译脚本数量:%num% ATTRIBout/*.*+R pause (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |