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

项目要求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文件夹下!

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

时间: 2024-08-27 01:10:37

Cocos2d-x使用Luajit将Lua脚本编译成bytecode,启用加密的相关文章

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

项目要求对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

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

转自:http://www.58player.com/blog-2537-87218.html 项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行.         下面是使用原生的lua解释器编译字节码:         1.新建一个名为1.lua的文件,里面只有一句话print("Hello Lua"),新建一个空的out.lua脚本文件         2.开始--运行--cmd

把perl脚本编译成exe

来源:http://www.veryhuo.com/a/view/38338.html 今天想把 perl 脚本编译成 exe 以便脱离 perl 解释器独立运行.都可以生成PERL的PE文件,在PERL官网有介绍. perl脚本编译成exe 一般有4种方法: 1. 使用 perl2exe 工具(需要购买,当然也有破解版或绿色版,不过网上只找到5.0版本的,而我的是5.12版本,版本太低所以不能使用) exe文件体积大 运行慢 2. 使用 ActiveState 公司的 Perl Dev Kit

通过luac编译lua脚本

在lua官网下载一个lua的release包,里面有已经编译好的lua启动文件(包括lua.exe),其中还有luac.exe, 这个程序是用来将lua文件编译成二进制码, 使用方法很简单,在控制台调用, luac.exe -o a.out a.lua 其中a.out是输出文件名,a.lua是输入的lua脚本 我这里写一个批处理文件,将脚本文件放在批处理文件同一目录运行即可: for /r %%v in (*.lua) do luac -o %%v %%v 转载请注明出处,from 博客园Hem

cocos2d-x Lua编译成二进制

编译cocos2dx自带的luajit 进入目录external/lua/luajit/src 运行命令make && make install 编译使用的命令 luajit -b main.lua ../bytecode/main.lua 批处理 使用js脚本进行批处理,把src的lua文件编译到bytecode目录里面 #!/usr/bin/env node var fs = require('fs'); var spawn = require('child_process').spa

Unity3d 调用 Luajit C++ DLL 实现调用 Lua脚本

前面介绍了在 Unity3d 中通过 Plugin 功能来调用 C++ DLL 中的函数 以及回调的使用方法,但最终目的还是让 Unity3d 中可以调用 Lua 脚本中的函数,现在来实现. 首先关注前面两篇文章: 1.Unity3d 调用C++ DLL (Win平台) 2.Unity3d 调用 C++ DLL之 DLL回调Unity3d (C++ DLL回调 C#函数) 文章转自http://blog.csdn.net/huutu 星环游戏 http://www.thisisgame.com.

mac下Nginx+lua模块编译安装

Nginx的nb之处就不说了,lua也是一个小巧的脚本语言,由标准C编写而成,几乎可以运行在所有的平台上,也非常强大,其他特性请自行度娘.nginx_lua_module是由淘宝的工程师清无(王晓哲)和春来(章亦春)所开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力 http://wiki.nginx.org/HttpLuaModule 下面说说mac下Nginx如何编译集成nginx_lua_module模块 1. 下载nginx需

Lua 脚本汇编-入门到精通

Why Lua --------------------------------------------- 一个功能强大,快速,轻量级,可嵌入的脚本语言.程序语法构造简单,用关键数组来实现强大的数据描述功能,同时还提供一些可扩展的语义特征动态类型,无需编译,由解释器先翻译成lua虚拟机的指令, 然后在虚拟机(基于寄存器实现)上运行.使用一个采用增量策略的GC来管理内存 1.Fast, 最快的脚本语言,luajit更是接近C 2.Clean ANSI C 可移植性好. 3.Embeddable,可

创建C++自定义类让Lua脚本调用

这里将介绍使用tolua++将自定义的C++类嵌入,让lua脚本使用 一般过程: 自定义类 -> 使用tolua++工具编译到LuaCoco2d.cpp中 -> lua调用 步骤一:自定义一个C++类,我定义一个类名为:MySprite MySprite.h MySprite.cpp 步骤二:根据自定义类创建一个.pkg文件,我们把自定义的MySprite类定义到.pkg文件中 注意:1>,只要根据自定类.h中的内容,至于.cpp的实现,binding后lua会自动调用类的函数 2>