luart 函数定时器使用
Contents
</div>
<ol>
函数原型 sys.timerLoopStart(function()
print("hello")
end,5000)
函数原型
sys.timerStart(sayHello,1000)
函数链接函数链接
pmd.ldoset GPIO使用注意事项
线程延时使用
参考代码1 sys.taskInit(function()
while true do
print("ss function test")
sys.wait(1000) -- 挂起1000ms,同理为每隔1000ms运行一次
end
end)
参考代码2`function test() while true doprint("ss function test")
sys.wait(1000) -- 挂起1000ms,同理为每隔10 ...
learn lua
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220 ...
对LuaJIT制作的游戏的简单修改(二)
本次修改的游戏还是在(一)中所讲的游戏,这一次的目的是要把游戏的反修改处理掉。但是跟(一)中不同的是这一次用到的技术会更高级一点,直接对LuaJIT进行hook。我们可以直接使用Lua自带的debug库来获得大量的信息,并且能够进行修改。
参考了国外大神的文章:
Hooking LuaJIT(原文)
看我如何通过hook攻击LuaJIT(译文)
注入Lua代码为了注入我们自己的Lua代码,我们需要获得游戏调用luaL_newstate返回的lua_State对象,其实就是Lua代码运行的一个环境。如国外大神的文章所说,直接hook luaL_newstate这个函数是不太妥当的,因为这时候库还没有加载,debug功能无法使用,所以可以选择hook luaL_openlibs这个函数,当然如果hook了luaL_newstate也是可以的,只需要自己手动调用一下luaL_openlibs就行。为了加载我们的代码,我们还需要得到luaL_loadfilex和lua_pcall两个函数的地址。
确定了所需要hook的函数之后,接下来就是确定hook方式。一般来讲是用dll来完成我们的hook ...
Lua
一、Lua安装及常用库的安装
1.1 Ubuntu
1.2 OS X
1.3 luasocket库的安装
1.4 lua-cjson库的安装
二、HelloWorld
三、数据类型 有8种基本数据类型
四、函数 第一类值
函数
闭包
五、控制语句
六、逻辑运算符 and、or、not
七、协同程序 coroutine
7.1 创建协同
7.2 协同的三个状态:挂起态(suspended)、运行态(running)、停止态(dead)。
7.3 如此挂起正在运行的协同
7.4 协同数据交换
八、数据结构 table
8.1 表的创建
8.2 表的增删改查
8.3 数组
8.4 矩阵(二维数组)
8.5 链表
九、metatable 元表
9.1 元表与元方法
9.2 表的代理
十、环境
10.1 全局变量 _G
10.2 非全局变量 setfenv
十一、包 package
11.1 包的定义
十二、面向对象
12.1 类与继承
12.2 多重继承
12.3 私有性
十三、weak table
十四、标准库
14.1 数学库 Mathematical F ...
Goto in LuaJIT
Lua 在 5.2 之后的版本,加入了 goto 这个关键字,用来控制程序跳转到指定 label。我们可以利用这个特性,来模拟 continue 的实现。需要注意的是 goto 只能跳转到 label,而 ::name:: 的格式就可以设置一个 label。
for i=1,5 do
if i == 3 then
goto continue
end
print(i)
::continue::
end
这样就简单实现了 continue。但是有些同学可能会有疑问,这是 Lua 5.2 的特性,我们都知道 OR 中使用的 Lua 5.1,那如何使用?
其实我们只需要使用 LuaJIT 就可以解决这个问题了。在 LuaJIT 的主页上有这个介绍:
LuaJIT supports some language and library extensions from Lua 5.2. Features that are unlikely to break existing code are unconditionally enabled:
...
nginx lua waf
ngx_lua_waf是一个基于lua-nginx-module(openresty)的web应用防火墙###用途:
防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
防止svn/备份之类文件泄漏
防止ApacheBench之类压力测试工具的攻击
屏蔽常见的扫描黑客工具,扫描器
屏蔽异常的网络请求
屏蔽图片附件类目录php执行权限
防止webshell上传
###推荐安装:
推荐使用lujit2.1做lua支持
ngx_lua如果是0.9.2以上版本,建议正则过滤函数改为ngx.re.find,匹配效率会提高三倍左右。
###使用说明:
nginx安装路径假设为:/usr/local/nginx/conf/
把ngx_lua_waf下载到conf目录下,解压命名为waf
在nginx.conf的http段添加
lua_package_path "/usr/local/nginx/conf/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /usr/local/nginx/ ...
openresty的lua语法学习一
openresty的lua语法学习
lua的popen获取命令的执行结果
1234567891011121314151617181920212223242526272829local myfile = io.popen("pwd", "r")if nil == myfile then print("open file for dir fail!!")endprint("n=========command dir result:")-- 读取文件内容for cnt in myfile:lines() do print(cnt)end-- 关闭文件myfile:close()local secondfile = io.popen("ifconfig")if nil == secondfile then print("open file for ifconfig fail!!")endprint("n==========command ifconfig result:" ...
Lua作图教程之设计模式
设计模式设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
到目前为止,我在用lua作图时只用到了单例模式,其他设计在后续开发中在逐步添加。
12345678910111213141516171819202122232425262728293031323334353637383940 优点 一、实例控制 单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。 二、灵活性 因为类控制了实例化过程,所以类可以灵活更改实例化过程。 缺点 一、开销 虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。 二、可能的开发混淆 使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例 ...
Nginx安装Lua模块
NGINX安装LUA(基于LNMP):1.下载安装LuaJIT 2.1:http://luajit.org/download.html
12345wget http://luajit.org/download/LuaJIT-2.1.0-beta3.tar.gztar zxf LuaJIT-2.1.0-beta3.tar.gzcd LuaJIT-2.1.0-beta3make PREFIX=/usr/local/luajitmake install PREFIX=/usr/local/luajit
2.下载最新的ngx_devel_kit(NDK)模块:https://github.com/simpl/ngx_devel_kit/tags
12wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gztar -xzvf v0.3.0.tar.gz
3.下载最新的lua-nginx-module 模块:https://github.com/openresty/lua-nginx-module/tags
12wget h ...
lua元表
在 Lua table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作。
因此 Lua 提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。
例如,使用元表我们可以定义Lua如何计算两个table的相加操作a+b。
当Lua试图对两个表进行相加时,先检查两者之一是否有元表,之后检查是否有一个叫”add”的字段,若找到,则调用对应的值。”add”等即时字段,其对应的值(往往是一个函数或是table)就是”元方法”。
有两个很重要的函数来处理元表:
setmetatable(table,metatable):对指定table设置元表(metatable),如果元表(metatable)中存在__metatable键值,setmetatable会失败 。
getmetatable(table):返回对象的元表(metatable)。
__index 元方法
这是 metatable 最常用的键。
当你通过键来访问 table 的时候,如果这个键没有值,那么Lua就会寻找该table的metatable(假定有met ...