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

摘要:
您可以看到,lua的原生解释器可以直接解析luac编译的字节码脚本,这非常方便!然后我再次检查了数据,发现2dx使用了luajit。从lua编译的字节码与luajit不兼容,因此根据上述方法编译的字节代码脚本不能在2dx中使用。也就是说,使用2dx中包含的luajit来编译lua脚本。以下是luajit如何编译字节码:1.有一个msvcbuild。cocos2d-x2.2.3scriptingluauajitLuaJIT-2.0.1src文件夹中的bat批处理文件。Luajit编译字节码加密完成!

http://www.cocoachina.com/bbs/read.php?tid=205802

lua脚本进行加密,查了一下相关的资料 ,得知lua本身能够使用luac将脚本编译为字节码(bytecode)从而实现加密。试了一下。确实可行。
以下是使用原生的lua解释器编译字节码:
1、新建一个名为1.lua的文件。里面仅仅有一句话print("Hello Lua"),新建一个空的out.lua脚本文件
2、開始--执行--cmd
3、luac -o out.lua 1.lua
注: luac -o [编译后脚本名] [脚本名],必要时带上脚本路径,如:

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


回车之后,再打开out.lua就能够看到编译好的字节码了

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


然后实验一下。运行这个字节码脚本。能够看到lua原生的解释器能够直接解析luac编译出来的bytecode脚本,非常方便!



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


重点:
做完了以上的一系列之后。我照着这种方法编译项目中的脚本,然后在cocos2dx环境下使用,发现不行!于是又查了一下资料,发现2dx使用的是luajit,lua原生编译出来的bytecode和luajit是不兼容的,所以照着上面方法编译出来的bytecode脚本无法在2dx中使用。


解决问题事实上非常easy。就是用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

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


编译完毕之后,会在src文件夹下生成一系列文件,当中有一个luajit.exe
Cocos2d-x使用Luajit将Lua脚本编译成bytecode,启用加密第5张

接下来就能够使用luajit.exe编译lua脚本的bytecode了:luajit -b [脚本名] [编译后的脚本名],运行完后会在src文件夹下生成一个已经编译成bytecode的jit.lua文件


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


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

以下把编译之后的jit.lua放在2dx中试一下。以HelloLuaproject为基础,把jit.lua放到samplesLuaHelloLuaResources下,改动AppDelegate.cpp中的lua调用为std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("jit.lua");
执行结果为:

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

至此。luajit编译bytecode加密已完毕!



严重关注:斯沃琪,我编译脚本名称是不一样的前后服用后。为了让大家看到了差距,当在项目中的实际使用,脚本编写的最佳一致之前的名称。否则,彼此脚本require时间可能出现故障!


免责声明:文章转载自《Cocos2d-x使用Luajit将Lua脚本编译成bytecode,启用加密》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vertica在电信的应用AlexNet详解3下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux下安装Python3.x和第三方库

如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!!!! 不要动现有的python2环境! 不要动现有的python2环境! 不要动现有的python2环境! 重要的使用说三遍! 一、安装python3.6 1. 安装依赖环境 #yum -y install...

Linux下安装mysql和curl扩展

在安装好apache2+php5之后,现在又想装上个mysql5玩玩。 用源码安装好mysql5之后,发现原来在Linux想为php添加新扩展,不像在windows上面,去掉分号注释就行了的~ 在网上查询了很多资料,终于搞定,特写日记以示祝贺。 添加扩展的基本步骤: 1、进入php源代码目录:# cd /usr/ChenShao/php-5.3.1/...

slua 中使用 lua5.3

   因为我们服务器极有可能要迁移到 skynet 上,它基于 lua5.3,而服务器和客户端会公用很多lua代码,所以在考虑在客户端 slua 中使用 lua5.3。  经过编译后,发现 slua 对 lua5.3的支持还有很多bug,可能是目前用的人比较少,最严重的一个问题是在 lua5.3 下,在 slua 中使用协程调用 Yield 会直接导致 u...

lua 代码加密方案

require 实现 require函数在实现上是依次调用package.searchers(lua51中是package.loaders)中的载入函数,成功后返回。在loadlib.c文件里有四个载入函数的实现,分别为searcher_preload, searcher_Lua, searcher_C, searcher_Croot。 searche...

redis 在 php 中的应用(key篇)

本文为我阅读了redis参考手册之后结合博友的博客编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: KEY(键) DEL EXISTS EXPIRE EXPIREAT keys MOVE PERSIST TTL RANDOMKEY RENAME RENAMENX TYPE SORT KEY(...

iOS 学习资料整理集合

视频教程(英文)Developing iOS 7 Apps for iPhone and iPad斯坦福开放教程之一, 课程主要讲解了一些 iOS 开发工具和 API 以及 iOS SDK 的使用, 属于 iOS 基础视频iPad and iPhone Application Development该课程的讲师 Paul Hegarty 是斯坦福大学软件工...