精华内容
下载资源
问答
  • 除了支持 RAM 查看、搜索和编辑之外,Cheat Engine 还包括一个 Lua 脚本引擎。 这为提高研究效率开辟了更多可能性,包括: 更具互动性。 使用 Lua 脚本,您可以创建一个单独的 Cheat Engine 窗口,其中包含任意 ...
  • 基于Lua脚本的自动化测试框架设计 软件测试 一、自动化测试背景 1.被测对象为嵌入式系统中使用Lua脚本做胶合的一个个模块接口。需要编写Lua脚本调用这些接口对接口进行测试,运行环境为嵌入式系统中并非PC机。 2...
  • 脚本探索性软件测试软件测试中基于Lua脚本的自动化测试框架设计自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步...
  • 1.如何编译lua2.C++ 中调用lua函数3.lua中如何调用C++函数4.深入的介绍lua栈(lua的灵魂)5.lua闭包和上值的使用6.lua元表的使用(lua的精髓)7.实现导出C++类给lua8.实现自动化导出类给lua9.导出OpenGL函数库给lua10....
  • 在untiy工程里搭建了tolua框架,不过还是个小白,只知道lua中调用C#脚本类可以通过反射完成,现在需要在C#脚本中调用Lua脚本类的函数,请问该如何完成?
  • 运行lua脚本 1.执行字符串 using Xlua; luaEnv luaenv = new LuaEnv(); //开启lua虚拟机,最好一个程序只有一个虚拟机(占用性能) luaenv.DoString("print('Hello world!')"); //运行lua脚本,输出带lua:前缀 luaenv....

    运行lua脚本

    1.执行字符串

    using Xlua;
    luaEnv luaenv = new LuaEnv(); //开启lua虚拟机,最好一个程序只有一个虚拟机(占用性能)
    luaenv.DoString("print('Hello world!')"); //运行lua脚本,输出带lua:前缀
    luaenv.Dispose();//关闭虚拟机
    

    另一种输出(unity输出),不带lua前缀

    using Xlua;
    luaEnv luaenv = new LuaEnv(); 
    luaenv.DoString("CS.UnityEngine.Debug.Log('Hello world!')"); //输出:Hello world!
    luaenv.Dispose();
    

    2.加载lua文件

    using Xlua;
    TextAsset ta = Resources.Load<TextAsset>("helloworld.lua") //helloworld.lua.txt
    luaEnv luaenv = new LuaEnv(); 
    luaenv.DoString(ta.text); 
    luaenv.Dispose();
    
    using Xlua;
    luaEnv luaenv = new LuaEnv(); 
    luaenv.DoString("require 'helloworld'"); //helloworld.lua.txt 
    luaenv.Dispose();
    

    3.自定义loader

    自定义的loader相当于一个委托,lua虚拟机调用require找文件时,默认先执行你自定义的loader,若返回一个byte数组,则运行byte数组中lua脚本。若返回空,在去调其他的loader委托函数,最终都没找到,会调用默认的xlua的loader,直接读取文件。
    注意:自定义loader参数为字符串,返回值为byte数组

    using Xlua;
    luaEnv luaenv = new LuaEnv(); 
    luaenv.AddLoader(MyLoader);
    luaenv.DoString("require 'helloworld'"); //helloworld.lua.txt  输出:123
    luaenv.Dispose();
    
    private byte[] MyLoader(ref string filePath)
    {
    	string s = "print(123)";
    	return System.Text.Encoding.UTF8.GetBytes(s);
    }
    

    例:用自定义loader,实现读取streamingAssets文件夹下lua脚本

    using Xlua;
    luaEnv luaenv = new LuaEnv(); 
    luaenv.AddLoader(MyLoader);
    luaenv.DoString("require 'helloworld'"); //streamingAssets下helloworld.lua.txt
    luaenv.Dispose();
    
    private byte[] MyLoader(ref string filePath)
    {
    	string absPath = Application.streamingAssetsPath + "/" +filePath + ".lua.txt";
    	return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(absPath));
    }
    
    展开全文
  • C++中搭建Lua脚本系统开发框架,并实现OpenGL调用 2004年毕业于...

    扫码下载「CSDN程序员学院APP」,1000+技术好课免费看

    APP订阅课程,领取优惠,最少立减5元 ↓↓↓

    订阅后:请点击此处观看视频课程

     

    视频教程-C++中搭建Lua脚本系统开发框架,并实现OpenGL调用-其他

    学习有效期:永久观看

    学习时长:185分钟

    学习计划:4天

    难度:

     

    口碑讲师带队学习,让你的问题不过夜」

    讲师姓名:张立铜

    技术总监/研发总监

    讲师介绍:2004年毕业于西南科技大学,计算机科学技术专业,从事软件开发,游戏开发,擅长游戏开发,桌面应用,手机游戏。

    ☛点击立即跟老师学习☚

     

    「你将学到什么?」

    1.如何编译lua 2.C++ 中调用lua函数 3.lua中如何调用C++函数 4.深入的介绍lua栈(lua的灵魂) 5.lua闭包和上值的使用 6.lua元表的使用(lua的精髓) 7.实现导出C++类给lua 8.实现自动化导出类给lua 9.导出OpenGL函数库给lua 10.游戏循环中调用lua,实现OpenGL绘制.

     

    「课程学习目录」

    1.如何通过源代码编译lua库
    2.C++中建立lua虚拟机环境,并执行lua语句
    3.将C++函数导出给lua,并在lua脚本中调用C++函数
    4.将C++函数导出给lua,并在lua脚本中调用C++函数2
    5.介绍lua栈
    6.学习lua-闭包和上值
    7.学习lua-metatable元表
    8.介绍如何导出类到lua中,对metatable和闭包的应用
    9.让导出类自动化-接口定义
    10.导出类-自动化-参数萃取
    11.导出类-自动化-参数获取和特化
    12.导出类-自动化-全局函数的处理
    13.导出OpenGL函数以及OpenGL常量
    14.OpenGL调用Demo制作
    15.脚本在游戏引擎中的经典的用法介绍

     

    7项超值权益,保障学习质量」

    • 大咖讲解

    技术专家系统讲解传授编程思路与实战。

    • 答疑服务

    专属社群随时沟通与讲师答疑,扫清学习障碍,自学编程不再难。

    • 课程资料+课件

    超实用资料,覆盖核心知识,关键编程技能,方便练习巩固。(部分讲师考虑到版权问题,暂未上传附件,敬请谅解)

    • 常用开发实战

    企业常见开发实战案例,带你掌握Python在工作中的不同运用场景。

    • 大牛技术大会视频

    2019Python开发者大会视频免费观看,送你一个近距离感受互联网大佬的机会。

    • APP+PC随时随地学习

    满足不同场景,开发编程语言系统学习需求,不受空间、地域限制。

     

    「什么样的技术人适合学习?」

    • 想进入互联网技术行业,但是面对多门编程语言不知如何选择,0基础的你
    • 掌握开发、编程技术单一、冷门,迫切希望能够转型的你
    • 想进入大厂,但是编程经验不够丰富,没有竞争力,程序员找工作难。

     

    「悉心打造精品好课,4天学到大牛3年项目经验」

    【完善的技术体系】

    技术成长循序渐进,帮助用户轻松掌握

    掌握其他知识,扎实编码能力

    【清晰的课程脉络】

    浓缩大牛多年经验,全方位构建出系统化的技术知识脉络,同时注重实战操作。

    【仿佛在大厂实习般的课程设计】

    课程内容全面提升技术能力,系统学习大厂技术方法论,可复用在日后工作中。

     

    「你可以收获什么?」

    C++中嵌入lua脚本,并导出C++类给lua使用以OpenGL为例,实现在lua中调用OpenGL函数,实现绘制.

     

    展开全文
  • tolua/ulua 框架中增加lua脚本的断点调试功能

    首先安装 vscode 然后安装好 luaide插件


    然后在框架下的LuaManager脚本中添加如下代码到对应位置

    if (LuaConst.openLuaSocket)
    {
            OpenLuaSocket();            
    }
    [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
    static int LuaOpen_Socket_Core(IntPtr L)
    {        
            return LuaDLL.luaopen_socket_core(L);
    }
    
    [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
    static int LuaOpen_Mime_Core(IntPtr L)
    {
            return LuaDLL.luaopen_mime_core(L);
    }
    
    protected void OpenLuaSocket()
    {
           LuaConst.openLuaSocket = true;
           lua.BeginPreLoad();
           lua.RegFunction("socket.core", LuaOpen_Socket_Core);
           lua.RegFunction("mime.core", LuaOpen_Mime_Core);     
           lua.EndPreLoad();               
    }

    ps:不要忘了 Using.System 否则会报错


    之后再https://github.com/k0204/LuaIde/tree/master/luadebug 该网址下载LuaDebug.lua文件 放到框架对应的目录,如下图



    然后再框架Lua逻辑函数入口Require LuaDebug.lua,

    local breakInfoFun,xpcallFun = require("LuaDebug")("localhost", 7003)


    然后在vscode 中点击调试界面 增加LuaDebug配置 选择Unity-uLua 然后就可以开始断点调试了 (PS:记得框架里面的AppConst 中的LuaBundleMode 设置为false)




    以上就是全部内容,如果不明白可以联系我。


    展开全文
  • aidp:weiboAd基础架构数据处理器:数据处理框架中的kafka消费者嵌入式Lua脚本语言
  • Wireshark中lua脚本介绍

    2021-03-26 14:15:03
    Wireshark中lua脚本介绍 概述 Wireshark是非常强大的报文解析工具,是网络定位中不可缺的使用工具,在物联网中很多为自定义协议,wireshark无法解析,此时lua脚本就有了用武之地。Lua是一个脚本语言,不需要编译...

    Wireshark中lua脚本介绍

    概述

    Wireshark是非常强大的报文解析工具,是网络定位中不可缺的使用工具,在物联网中很多为自定义协议,wireshark无法解析,此时lua脚本就有了用武之地。Lua是一个脚本语言,不需要编译可以直接调用,完美解决了自定义报文解析。

    代码框架

    -- create a new dissector
    local NAME = "Doip"
    local PORT = 13400
    local Doip = Proto(NAME, " Doip Protocol")
    -- dissect packet
    function Doip.dissector (tvb, pinfo, tree)
    end
    -- register this dissector
    DissectorTable.get("udp.port"):add(PORT, Doip)
    

     

    如上一个简单的lua代码分为三部分:

    1. 创建Proto对象
    2. 创建dissector方法
    3. 注册解析器

    加载解析器到wireshark

    将lua文件放在wirekshark的安装目录,在wireshark的根目录中找到init.Lua,打开后将文件中的enable_lua设置为true,并在文件目录中增加我们编写的lua脚本,使用的为dofile(DATA_DIR.."DoIP.lua”)。

    uploading.4e448015.gif转存失败重新上传取消

    Figure 1lua脚本放置位置

    uploading.4e448015.gif转存失败重新上传取消

    Figure 2修改enable_lua为true

    uploading.4e448015.gif转存失败重新上传取消

    Figure 3注册新编写脚本

    重新打开wireshark或者shift+ctrl+L快捷键进行lua加载即可进行解析。

     

    Lua插件API接口

    1. Proto对象

    表示一个新的protocol,使用

    接口

    说明

    proto:__call (name,desc)

    创建Proto对象。name和desc分别是对象的名称和描述,前者可用于过滤器等

    proto.name

    get名称

    proto.fields

    get/set字段

    proto.prefs

    get配置项

    proto.init

    初始化,无参数

    proto.dissector

    解析函数,3个参数tvb,pinfo,tree,分别是报文内容,报文信息和解析树结构

    proto:register_heuristic (listname, func)

    为Proto注册一个启发式解析器,被调用时,参数func将被传入与dissector方法相同的3个参数

     

    常用使用:

    local NAME1          = "red"

    local PORT           = 5004

    local RTP_PROTO_TYPE = 106

    local red    = Proto(NAME1, "Red Protocol")

    1. Protofield

    此对象为协议字段,用于解析字段后在描述字上添加节点,根据接口不同可以分成两大类:

    整型:

    ProtoFiled.{type}(abbr,[name],desc,base,valuestring,mask)

    Type包括:uint8,uint16,uint24,uint32,uint64,framenum

    Abbr:过滤器的名字

    Name:在解析树中的名字

    Base:One of base.DEC, base.HEX or base.OCT, base.DEC_HEX, base.HEX_DEC, base.UNIT_STRING or base.RANGE_STRING.

    Valuestring:可以用表的形式来进行解析,也可以理解为switch语句

    Mask:类型掩码

    Desc:字段描述

    其他类型:

    ProtoField.{type},(abbr,[bane],[desc])

    Type包括:float,double,string,stringz,bytes,bool,ipv4,ipv6,ether,oid,guid.

    []内的事可选字段,{}中的事可替换字段。

    示例如下:

    -- create fields of red

    fields_M = ProtoField.uint8 (NAME1 .. ".M", "M",base.HEX,Payload_type,0x80)

    fields_pt = ProtoField.uint8 (NAME1 .. ".PT", "PT", base.DEC,Payload_type,0x7F)

    fields_seqno   = ProtoField.uint16(NAME1 .. ".seqno", "Sequence number")

    fields_h264bytes = ProtoField.bytes(NAME1 .. ".bytes", "H264Data")

    fields_fec        = ProtoField.bytes(NAME1 .. ".fec", "FEC Payload")

    这些字段添加到结构树种后显示如下:

    uploading.4e448015.gif转存失败重新上传取消

    1. Tvb

    Testy vitual Buffer表示报文缓存,也就是实际报文数据,可以通过一下方法将报文数据中解析出信息,接口如下:

    tvb:__tostring()

    将报文数据转化为字符串,可用于调试

    tvb:reported_len()

    get tvb的(not captured)长度

    tvb:len()

    get tvb的(captured)长度

    tvb:reported_length_remaining()

    获取当前tvb的剩余长度,如果偏移值大于报文长度,则返回-1

    tvb:offset()

    返回原始偏移

     

     常用的字段是tvb:len()

    1. Pinfo

    报文信息(packet information),接口如下:

    接口

    说明

    pinfo.len pinfo.caplen

    get报文长度

    pinfo.abs_ts

    get报文捕获时间

    pinfo.number

    get报文编号

    pinfo.src pinfo.dst

    get/set报文的源地址、目的地址

    pinfo.columns pinfo.cols

    get报文列表列(界面)

    获得列表信息后就可以设备该列文本,比如

    -- show protocol name in protocol column

    pinfo.cols.protocol = “RED”

    如上,可以将协议类型显示为RED

     

     

    1. Treeitem

    解析树,用来展示字段的树形结构

    接口

    说明

    tree_item:add_packet_field(protofield, [tvbrange], encoding, [label])

    使用协议字段创建一个子树,可以根据入参调整大小字节序ENC_BIG_ENDIAN or ENC_LITTLE_ENDIAN

    treeitem:add([protofield], [tvbrange], [value], [label])

    增加一个子树,并返回该子树,使用大字节序解析

    treeitem:add_le([protofield], [tvbrange], [value], [label])

    增加一个子树,并返回该子树,使用小字节序解析

    treeitem:append_text

    附加文本到这个表

    treeitem:prepend_text(text)

    在表前增加文本

    treeitem:add_proto_expert_info(expert, [text])

    设置树项的专家标志并将专家信息添加到包中。

     

    1. DissectorTable

    这个是一个具体协议解析表,比如TCP的解析表tcp.port包括http,SMTP,ftp等

    此对象的接口如下:

    接口

    说明

    DissectorTable.get(name)

    get名为name的解析表的引用

    dissectortable:add(pattern, dissector)

    将Proto或Dissector对象添加到解析表,即注册。pattern可以是整型值,整型值范围或字符串,这取决于当前解析表的类型

    dissectortable:remove(pattern, dissector)

    将满足pattern的一个或一组Proto、Dissector对象从解析表中删除

    1. 其他API接口

    https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Proto.html

     

     

     

    1. 样例:

     

    local version_str = string.match(_VERSION, "%d+[.]%d*")

    local version_num = version_str and tonumber(version_str) or 5.1

    local bit = (version_num >= 5.2) and require("bit32") or require("bit")

     

    -- create a new dissector to decode rtp private payload

    local NAME1          = "red"

    local PORT           = 5004

    local RTP_PROTO_TYPE = 106

     

    local red            = Proto(NAME1, "Red Protocol")

     

    -- create fields of red

    fields_M             = ProtoField.uint8 (NAME1 .. ".M", "M", base.HEX,Payload_type,0x80)

    fields_pt            = ProtoField.uint8 (NAME1 .. ".PT", "PT", base.DEC,Payload_type,0x7F)

    fields_seqno         = ProtoField.uint16(NAME1 .. ".seqno", "Sequence number")

    fields_h264bytes     = ProtoField.bytes(NAME1 .. ".bytes", "H264Data")

    fields_fec           = ProtoField.bytes(NAME1 .. ".fec", "FEC Payload")

     

    red.fields           = { fields_M, fields_pt, fields_seqno, fields_h264bytes,fields_fec }

     

    local RTP_dis        = Dissector.get("rtp")

    local H264_dis       = Dissector.get("h264")

    local Data_dis       = Dissector.get("data")

     

    -- dissect packet

    function red.dissector(tvb, pinfo, tree)

        length = tvb:len()

        if length == 0 then return end

        -- decode private header

        local subtree = tree:add(red, tvb(0,3))

        subtree:add(fields_M, tvb(0,1))

        subtree:add(fields_pt, tvb(0,1))

        subtree:add(fields_seqno, tvb(1,2))

     

        -- show protocol name in protocol column

        pinfo.cols.protocol = red.name

       

        local fec_id = tvb(0,1):uint()

        local fec_type = bit.band(fec_id,0x7F)

        if fec_type == 109 then

            tree:add(fields_fec,tvb(3))

        else

            H264_dis:call(tvb(3):tvb(), pinfo, tree)

        end

    end

     

    --decode first layer  as rtp

    local udp_dissector_table = DissectorTable.get("udp.port")

    udp_dissector_table:set(PORT,RTP_dis)

     

    -- register this dissector

    -- DissectorTable.get("rtp.pt"):add(PORT, red)

    --decode private protocol layer  3-bytes private datas + standard h264

    local rtp_dissector_table = DissectorTable.get("rtp.pt")

    rtp_dissector_table:set(RTP_PROTO_TYPE,red)

     

     

    附录:

    red.dissector(tvb, pinfo, tree)

     

    参考:https://blog.csdn.net/qq_40421919/article/details/103516694

    展开全文
  • 它使用MuPDF库(请参阅库,CREngine库,libk2pdfopt库,并使用Lua编写脚本(请参见 )。 为了获得良好的速度,它使用LuaJIT编译器。 这一切都始于KindlePDFviewer应用程序,此应用程序得到了极大的增强,现在以新...
  • Scrapy框架:splash+Lua 脚本实现滚轮动态加载一、 前言1.1 背景1.2 技术对比二、Splash环境搭建2.1 docker安装(windows 10)2.2 splash 安装2.3 启动 Splash 服务2.4 安装python的 scrapy-splash 包三、 Scrapy ...
  • Lua脚本介绍 Lua是一款基于C编写的脚本语言 设计目的:通过灵活嵌入应用程中从而为应用程序提供灵活的扩展和定制功能 Lua脚本应用场景 游戏开发 独立应用脚本 web应用脚本 扩展和数据库插件 如:MySQL proxy和MySQL ...
  • 利用 cocos2dx-LuaProxy 也可以来实现lua版http功能,具体请移步到:【COCOS2DX-LUA 脚本开发之九】使用cocos2dx-LuaProxy便捷Lua项目快速使用cocos2dx引擎extensions扩展包   Cocos2dx 为我们封装了在cocos2dx...
  • 本站文章均为李华明Himi原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接:... 利用cocos2dx-LuaProxy 也可以来实现lua版http功能,具体请移步到:【COCOS2DX-LUA 脚本开发之九】使用cocos2...
  • 比如我们开发一个业务框架,其他人写lua脚本来实现具体的功能。 2、c调用lua脚本 2.1 下载lua源代码 wget http://www.lua.org/ftp/lua-5.3.4.tar.gz 2.2 解压 tar -xzvf lua-5.3.4.tar.gz 2.3 编译 make ...
  • Lua是一种免费、开放的中间代码型的脚本语言,作者在研究了它的结构和 特点的基础上,对Lua运行...文章最后模 拟了一个仿真的游戏环境,分析了引擎与Lua脚本在游戏中各个模块的实现过 程,并构建了一个两者整合的框架
  • 1.如何编译lua 2.C++ 中调用lua函数 3.lua中如何调用C++函数 4.深入的介绍lua栈(lua的灵魂) 5.lua闭包和上值的使用 6.lua元表的使用(lua的精髓) 7.实现导出C++类给lua 8.实现自动化导出类给lua 9.导出OpenGL...
  • ToLua学习笔记,运行bundle中的lua脚本

    千次阅读 2017-08-31 17:50:03
    ToLua框架支持直接读取运行lua脚本文件,也支持读取打包到.unity3d中的lua脚本。另外ToLua还支持字节码方式读取脚本。 打包工具类Packager.cs中对脚本的打包,选择如下打包方式: 注意此部分经过我的修改。然后它...
  • 本文固定链接:http://blog.sunqiang.me/2017/08/07/使用zerobrane-studio调试openresty和nginx-lua脚本/ 转载请注明:sunny51562017年08月07日于技术人生-孙强发表 ZeroBrane Studio已被用于调试各种Lua引擎 – ...
  • 最重要的是执行lua脚本还具备原子性, 所以在对一致性要求高的环境下, lua脚本或许是个不错的选择.本文通过具体的场景来简介下lua脚本的使用.这里,我们基于Springboot框架的RedisTemplate来操作redis. 问题抽象: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 594
精华内容 237
关键字:

lua脚本框架