Cocos2d-x使用Luajit实现加密

Cocos2d-x使用Luajit实现加密,第1张

概述    项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行。下面是使用原生的lua解释器编译字节码:     1、新建一个名为1.lua的文件,里面只有一句话print("Hello Lua"),新建一个空的out.lua脚本文件     2、开始--运行--cmd3、luac -o out.lu

项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行。下面是使用原生的lua解释器编译字节码:

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

2、开始--运行--cmd3、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

5、将生成的luajit.exe、lua51.dll、jit 复制到打包工具的相对目录下,这样在工具中就可以直接调用luajit –b source_file out_file (一般都是lua后缀,代码不用改动)



接下来就可以使用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加密已完成!


严重注意:例子中,我把编译前后的脚本名字取的不一样,是为了让大家看出差异化来,实际在项目中使用的时候,脚本的名字编译前后最好都一致,不然在脚本中相互require的时候可能会出现问题!一个一个转换脚太麻烦了,分享一个bat批处理,可以批量转换一个文件夹中的所有lua文件.

代码如下:

@echo offif exist out rd /s /q outmkdir out:inputclsset input=:set /p input= 拖入要编译的lua文件夹:set "input=%input:"=%"if "%input%"==":" goto inputif not exist "%input%" goto inputfor %%i in ("%input%") do if /i "%%~di"==%%i goto inputpushd %cd%cd /d "%input%">nul 2>nul || exitset cur_dir=%cd%popdset /a num = 0for /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/*.* +Rpause
编译后,文件夹内所有的lua脚本将被批量编译为字节码,并保存在xxx\out目录下,如:



注:XXX为打包加密文件路径


还有小提示:ios64目前只支持lua,不支持用luajit生成二进制*.lua.


引用博客:http://jingyan.baIDu.com/article/0a52e3f4179713bf62ed72f1.HTML

总结

以上是内存溢出为你收集整理的Cocos2d-x使用Luajit实现加密全部内容,希望文章能够帮你解决Cocos2d-x使用Luajit实现加密所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1037392.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存