如何阅读luajit解密的代码

如何学习 Lua VM 的源码? - 知乎1635被浏览51139分享邀请回答2298 条评论分享收藏感谢收起27912 条评论分享收藏感谢收起查看更多回答cocos2dx目前的版本中用luajit代替了lua原生库,但是iOS上不是不支持luajit么? - 知乎52被浏览4851分享邀请回答142 条评论分享收藏感谢收起113 条评论分享收藏感谢收起写回答Lua和Luajit的优势和不足(1) - CSDN博客
Lua和Luajit的优势和不足(1)
一、什么是lua&luaJit
lua(www.lua.org)其实就是为了嵌入其它应用程序而开发的一个脚本语言,luajit(www.luajit.org)是lua的一个Just-In-Time也就是运行时编译器,也可以说是lua的一个高效版。
1)lua是一个免费、小巧、简单、强大、高效、轻量级的嵌入式的脚本语言,lua当前的发行版本5.3.1只有276k。
2)它是用C语言开发的项目,所以可以在大部分的操作系统上运行
3)lua是目前速度最快的脚本语言,既可以提升语言的灵活性还可以最大限度的保留速度
4)其语法非常简单,没有特例
5)lua还可以作为C的API来使用
三、不足和不同
1)lua没有强大的库,所以很多功能实现起来没有python、perl、ruby等脚本语言简洁
2)lua的异常处理功能饱受争议,虽然其提供了pcall和xpcall的异常处理函数
3)lua原生语言中没有提供对unicode编码的支持,虽然可以通过一些折中的办法实现 /darkdestiny/archive//81055.html
4)没有提供在C++中应用很广泛的a?b:c的三元运算符操作
5)没有switch...case...语法,只能通过if..elseif..elseif..else..end的方式折中实现
6)在循环时没有提供continue语法
7)没有C++中应用广泛的a++和a+=1等操作
8)lua的索引是从1开始的,而不是我们熟悉的0(string,table)
9)当你给一个元素赋值为nil时相当于这个元素不存在
10)lua的数值类型只有number是没有int,float,double等之分的
11)lua中没有类的概念,其类是通过table的形式来实现的
12)lua中只有nil和false是表示假的,零在lua中是为真的
13)很多程序需要()标示才能运行,比如a={[&b&]=5},print(a.b)是可运行的,但是 {[&b&]=5}.b就会报错,需要({[&b&]=5}).b才可以
综上,lua是一个简单,高效所以在游戏逻辑开发和服务器开发中(ngx_lua)得到广泛的应用。
本文已收录于以下专栏:
相关文章推荐
和在所有其他编程语言中一样,在Lua中,我们依然应当遵循下述两条有关程序优化的箴言:
原则1:不要做优化。
原则2:暂时不要做优化(对专家而言)。
这两条原则对于Lua编程来说尤其有意义,Lua正是因...
【Lua、LuaJIT、tolua++、lua for windows】这几个到底有什么关系?!
作者:paintsnow
链接:/question//answer/
来源:知乎
著作权归作者所有,转载请联系作者获得...
测试对比 Luajit 和原生 Lua 的性能
复习的时候,网上看到的留着自己用。
/newwy/p/3222249.html
1.全局变量与环境
lua中真正存储全局变量的地方不是在_G里面,而是在setfenv(i,table)的table中,所有当前的全局变量都在这里面找,只不过在程序开始时lua会默认先设置一个变...
刚才看了牛人云风的文章说 luajit不如lua稳定。所以以后就不会涉及到luajit了。因为我还是很看重稳定性的。
至于lua,对于我来说,主要是简单的逻辑,更多的是内存的映射赋值,以及初始化时候不...
【lua的require、dofile、loadfile、loadstring及luamodule机制】
/developerworks/cn/linux/l-cn-closure/
他的最新文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)(window.slotbydup=window.slotbydup || []).push({
id: '4688984',
container: s,
size: '300,600',
display: 'inlay-fix'
关于本站本站为360用户提供方便快捷的360产品问题解答信息,让我们理智客观的对待互联网信息。本站信息来源于互联网,如有侵权,请联系站长。Luajit反编译之探索记 - CSDN博客
Luajit反编译之探索记
由于工作需求,要反编译一个luajit编译过的文件。百度反编译luajit,得到的信息是目前没有此类成熟的反编译器。所以,如果你用luajit编译了代码,基本上不用担心被别人破解(2015.12)。
虽然没有luaj反编译器,但是不代表反编译不可能。至少,人肉反编译是可以的,哈。因为我只需要反编译一个文件,所以采取人肉的方式,也许是可行的。
首先,在github上面找到了唯一的一个项目是关于,这个作者写了个工具,可以把手头上的代码翻译成可以可以阅读的模式。(在win/linux下可以直接执行他的工具,他的工具用的是AutoIt脚本写的)
通过阅读他的源码,才知道这个工具首先是用luajit的命令行工具,把字节码转换成可读的模式:
luajit -bl test.lua test.txt
翻译的思路,就是根据luajit提供的指令表,把指令翻译成对应的lua源码,例如, 对这句指令 MOV
dst var,翻译成 local dst = var
在对luajit指令的翻译过程,最麻烦的是,lua里的function被重新整理,原来是树状结构的(毕竟大家总是会在function里嵌套function),编译后变成线性的。
这个项目的作者没有解决这个问题,反编译出来的内容,是无数个function,而且没有排版,function里的指令也只是单纯的翻译。所以看着翻译后的代码(三千多行),也极是头疼。
但是这是唯一的线索,所以只能硬着头皮做了。在阅读和整理的过程中,我也懂得去luajit的上查找指令的意思,发现这个作者写的工具bug不少,一些比较难理解的地方,一般都是翻译错了,所以还得再过一遍指令。
作者自己也说了,这个项目只是够用他自己的需求而已。
在经过整合代码后,终于人肉地把线性的function列表整理回树状的。事实上这块是有规则可循的,所以写一个工具来转换,肯定是可以的。
当整个结构和代码看似都整理好后,我面临着一个大问题。function里有些变量是上某层function的,怎么去定位这个变量呢,由于这样的变量不少,如果不能定位准确,那可能前功要尽弃。
luajit的命令行工具luajit -bl指令翻译出来的可读字节码并没有包含这层信息。但是文件要执行,必然需要这层信息,也就是说luajit -bl没有翻译完所有信息。
上面提到的那个反编译项目,作者在他的说明里提到了这点,说他也不知道有没有可能解决这个问题。
我在谷歌上,试着再去搜索luajit翻遍,没有找到,但是找到了另一个,这个项目的存在也挺特别,只是单纯地把luajit的一些功能(编译功能)用lua源码重新实现一遍。(作者说,单纯是提供学习)
看着使用方法,感觉好像没有卵用,但是在说明的最后一部分,看到了希望,这个工具除了能像luajit -bl一样外,还可以进一步地,把函数内的全局变量表引用的信息也翻译出来了。
有了这件法宝,接下来我就顺利得反编译出这个源码了(1千多行的代码)
本文已收录于以下专栏:
相关文章推荐
lua源文件--obfuscate--&lua源文件(混淆后)--compile--&luac文件(带调试用的变量名和行号)--strip--&luac文件(不带调试信息)
luac的解密
1.Lua的虚拟机指令,5.2 的有40条
Lua的指令使用一个32bit的unsigned integer表示。所有指令的定义都在lopcodes.h文件中(可以从Lua 官方网站下载),使用一个...
lua的编译需要工具luac.exe
cmd:  luac xxx.lua -o xxx.lua
编译后的文件为二进制文件,未加密,可用luadec.exe进行反编译:
cmd: luadec ...
最近把android下的Lua换成了Luajit,并且使用了bytecode,后来发现某些品牌的手机崩溃的比较多,于是怀疑是不是luajit的问题,所以就对Luajit的bytecode模式做了点调研...
cocos luacompile
cocos luacompile
OverviewUsageAvailable ArgumentsSamples
Compile the .l...
In the LuaJIT source distribution, there is a folder called 'libs'
which contain necessary Lua ...
新版本的cocos2d-x使用了luajit来替代原始的lua,好处一是可以极大的提高运行速度(android下可以开jit,运行速度提高10~60倍,ios下不可以开jit,运行速度也可以提高2~3...
他的最新文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 luajit与lua区别 的文章

 

随机推荐