您的位置:MYSQL中文网 > Cocos2d-x使用Luajit实现加密

Cocos2d-x使用Luajit实现加密

2023-05-22 12:30 Lua教程

 Cocos2d-x使用Luajit实现加密

项目要求对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.3scriptinglualuajitLuaJIT-2.0.1src目录下有个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后缀,代码不用改动)

<img src="//atts..cn/attachments/image/cimg/pp接下来就可以使用luajit.exe编译lua脚本的bytecode了:luajit -b [脚本名] [编译后的脚本名],执行完后会在src目录下生成一个已经编译成bytecode的jit.lua文件。/ppimg src=" attachments="" image="" cimg="" 2016-02-22_56cb2ca40043a.jpg"="" alt="" p="" pimg="" jit.lua");运行结果为:="" <="">

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

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

编译后,文件夹内所有的lua脚本将被批量编译为字节码,并保存在xxxout目录下,如:

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

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

引用博客:http://jingyan.baidu.com/article/0a52e3f4179713bf62ed72f1.html

阅读全文
以上是MYSQL中文网为你收集整理的 Cocos2d-x使用Luajit实现加密全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
  •  Lua table(表)

    Lua table(表)

    table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数字、字典等。 Lua table 使用关联型数组,你可以用任意类型...

  • ruby哈希 Ruby 哈希(Hash)

    ruby哈希 Ruby 哈希(Hash)

    哈希(Hash)是类似 "employee" = "salary" 这样的键值对的集合。哈希的索引是通过任何对象类型的任意键来完成的,而不是一个整...

  • 面向对象private Ruby 面向对象

    面向对象private Ruby 面向对象

    Ruby 是纯面向对象的语言,Ruby 中的一切都是以对象的形式出现。Ruby 中的每个值都是一个对象,即使是最原始的东西:字符串、数...

  • ruby socket Ruby Socket 编程

    ruby socket Ruby Socket 编程

    Ruby提供了两个级别访问网络的服务,在底层你可以访问操作系统,它可以让你实现客户端和服务器为面向连接和无连接协议的基本套接...

  • R语言决策树 R语言 决策

    R语言决策树 R语言 决策

    决策结构要求程序员指定要由程序评估或测试的一个或多个条件,以及如果条件被确定为真则要执行的一个或多个语句,如果条件为假则...

  • r语言数组下标 R语言 数组

    r语言数组下标 R语言 数组

    数组是可以在两个以上维度中存储数据的R数据对象。 例如 - 如果我们创建一个维度(2,3,4)的数组,则它创建4个矩形矩阵,每个矩...

  • r语言xml文件读取 R语言 XML文件

    r语言xml文件读取 R语言 XML文件

    XML是一种文件格式,它使用标准ASCII文本共享万维网,内部网和其他地方的文件格式和数据。 它代表可扩展标记语言(XML)。 类似...

  • r语言二项分布 R语言 二项分布

    r语言二项分布 R语言 二项分布

    二项分布模型处理在一系列实验中仅发现两个可能结果的事件的成功概率。 例如,掷硬币总是给出头或尾。 在二项分布期间估计在10次...

  •  Kotlin 对象表达式和对象声明

    Kotlin 对象表达式和对象声明

    Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类。对象表达式通过对...

  • kotlin if Kotlin 条件控制

    kotlin if Kotlin 条件控制

    IF 表达式一个 if 语句包含一个布尔表达式和一条或多条语句。// 传统用法var max = a if (ab) max = b// 使用 else var max: Int...

© 2024 MYSQL中文网 mysqlcn.com 版权所有 联系我们
桂ICP备12005667号-29 Powered by CMS