lua脚本碰到的问题

xss大约 3 分钟lualua

image-20231201101923859
image-20231201101923859

xss@ubuntu:~$ vim ~/.bashrc xss@ubuntu:~$ source ~/.bashrc

-- 获取当前脚本所在路径
local script_path = debug.getinfo(1, 'S').source:match[[^@?(.*[\/])[^\/]-$]]

-- 将当前路径添加到 package.path 中
package.path = script_path .. "?.lua;" .. package.
-- 获取当前脚本所在路径
local script_path = debug.getinfo(1, 'S').source:match[[^@?(.*[\/])[^\/]-$]]

-- 将当前路径添加到 package.path 中
package.path = script_path .. "?.lua;" .. package.path

image-20231201104047776
image-20231201104047776

让我们逐步解释你提供的元表(Metatable)的例子:

-- 示例 1: 使用元表设置和获取
mytable = {}                          -- 普通表 
mymetatable = {}                      -- 元表
setmetatable(mytable, mymetatable)    -- 把 mymetatable 设为 mytable 的元表 

-- 或者可以写成一行
mytable = setmetatable({}, {})

这段代码创建了一个普通的表 mytable 和一个空的元表 mymetatable,然后通过 setmetatable 函数将元表关联到表上。现在,mytable 的元表就是 mymetatable

-- 示例 2: 查看对象的元表
getmetatable(mytable)                 -- 这回返回 mymetatable

这段代码使用 getmetatable 函数查看表 mytable 的元表,返回的结果应该是 mymetatable

-- 示例 3: __index 元方法
other = { foo = 3 } 
t = setmetatable({}, { __index = other }) 
t.foo
-- 输出: 3
-- 因为 t 表中没有 foo 键,通过 __index 元方法查找到了元表 other 中的 foo 值
t.bar
-- 输出: nil
-- 因为 t 表和元表 other 都没有 bar 键,返回 nil

这里创建了一个表 other,并将其作为元表的 __index 元方法关联到表 t 上。当你访问 t.foo 时,Lua 首先在表 t 中查找,然后根据元表的 __index 元方法找到了 other 表中的 foo 值。当访问 t.bar 时,由于 t 和其元表都没有 bar 键,返回 nil

-- 示例 4: __newindex 元方法
mymetatable = {}
mytable = setmetatable({key1 = "value1"}, { __newindex = mymetatable })

mytable.key1
-- 输出: value1
-- 通过 __newindex 元方法对已存在键进行访问
mytable.newkey = "新值2"
-- 输出: 新值2
-- 通过 __newindex 元方法对新键进行赋值,而不进行实际赋值操作
mytable.key1 = "新值1"
-- 输出: 新值1
-- 对已存在键进行赋值,而不调用 __newindex 元方法

这里创建了一个表 mytable 并将其元表 mymetatable 中的 __newindex 元方法关联到表 mytable 上。当对已存在的键 key1 进行访问时,直接返回该键的值。当对新键 newkey 进行赋值时,通过元方法 __newindex 进行处理而不实际进行赋值操作。当对已存在键 key1 进行赋值时,由于已存在键,直接进行赋值操作而不调用元方法。

这些示例展示了元表在 Lua 中的基本用法,包括 __index__newindex 元方法以及元表的设置和获取。这些功能可以用于实现一些高级的表操作和定制化的行为。

Loading...