以自定义方式加载 lua 模块

EmmyLua调试说明.pdf 立即下载

      今天我们的一个小项目开始做内部测试发布前的资源打包。这个项目基本上是用 lua 做开发的。整个开发过程中,我们的代码是直接把 Lua 源代码放在项目的发布目录下的。发布版因为安全或是整洁等种种原因,我们必须给所有的脚本代码打包。

     这种事情以前在大话2 里也干过,当时用的 lua 4.0 而且也没多少经验,我们是直接去修改的 lua 的代码,适应我们的打包格式。这次,不想这么干了。希望能够完全不动 lua 官方发布的源代码,来最终完成这项工作。

    简单分析了一下,发现实现起来非常简单:

     从 Lua 5.1 以后,Lua 有了标准的模块管理库。所以所有的模块加载都是通过 require 来完成。 require 的设计是颇具扩展性的,它会从若干个定义好的 loader 中逐个尝试加载新的模块。系统库中提供了四个 loader ,分别实现已加载模块,Lua 模块,和 C 扩展模块(用了两个 loader 来实现 C 扩展模块的加载)。这些 loader 以 CFunction 的形式放在 require 的环境中的一个 table 里。

    如果我们想改变 lua 模块的加载形式,只需要替换或增加一个新的 loader 就可以了。

要做的只需要模仿 loadlib.c 中的 loader_Lua 函数做一个自己的实现,比如在我们的项目中,就允许从自定义格式数据包中,加载一个被加密过的 Lua 代码文件。然后写几行 C 代码,获得 require 的环境(使用 lua_getfenv ),然后取出其中 "loaders" 这个 table ,把新的自定义 loader 插入到 index 2 的地方。

    具体的代码就不详述了,仔细阅读一下 ll_require 的实现(在 loadlib.c 中)就很容易明白。我们的整个工作从分析到实现没有超过两个小时,这真是得益于 Lua 良好的设计啊 :D 甚至如果你想从一个网络连接的数据流中加载 Lua 模块,或是通过 http/ftp 协议下载,也是行的通的吧。

    原文地址:http://blog.codingnow.com/2007/04/user_define_lua_loader.html

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一) 阅读详情

相关推荐

11、rsa-目标主机支持RSA密钥交换【原理扫描】的漏洞

通过将 etcd 的 TLS 密钥交换算法从 RSA 升级为 ECDHE,可实现前向保密,彻底消除 “私钥泄露导致历史流量解密” 的风险。核心步骤是通过强制启用含ECDHE的套件,并禁用 RSA 密钥交换套件,同时建议升级到 TLS 1.2+ 并优化证书类型(优先 ECDSA)。这一配置符合云原生安全最佳实践,也是 Kubernetes 等依赖 etcd 的系统推荐的安全标准。生成临时密钥的具体步骤是什么?如何验证etcd是否已成功更新为ECDH密钥交换算法?配置临时密钥交换算法可能带来哪些性能影响。

xuebo1129927648的博客 1万+

【EmmyLua插件】Rider无法跳转lua文件解决

emmylua插件跳转问题

qq_38139418的博客 4340

信息系统项目管理师(高项)重点!

学习高项自己做的笔记

PanJWei的博客 3301

Unity + Rider + EmmyLua使用中遇到的问题

Unity + Rider + EmmyLua 使用遇到问题

Yang的博客 6648

Dify+工作流,通过多模态实现发票自动识别

上个章节我们用Dify实现了基于本地知识库的聊天助手,本节我们通过工作流 ,可视化界面快速构建复杂的工作流和自动化流程。结合 OCR(光学字符识别)技术和工作流引擎,可以实现发票的自动识别、数据提取以及后续的审批流程。本文将详细介绍如何使用 Dify 和工作流来实现发票的自动识别与审批。

odin2005的博客 7425

ESP-IDF的安装及其在VScode中编译环境的搭建

从安装目录的\Espressif\frameworks\esp-idf-v5.3.2\examples路径中拷贝一个工程到项目中,比如拷贝\get-started下的hello_world文件夹。安装时可能会遇到如下问题,提示:"e:\ssc\software\ESP-IDF\v5.3.2\Espressif\tools\idf-python\3.11.2\python.exe -m pip" is not valid. (ERROR_INVALID_PIP)接着等待安装完成即可,其他步骤同方式1。

Freddy_Ssc的博客 4365

使用Unity+JetBrainsRider+EmmyLua编写及调试Xlua

使用JetBrainsRider+EmmyLua编写及调试Xlua一、安装JetBrainsRider新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FL...

UnityFire的博客 1万+

从理论到实践:使用Sigrity SystemSI完成DDR4信号完整性仿真全流程解析

本文详细解析了使用Sigrity SystemSI完成DDR4信号完整性仿真的全流程,从核心挑战到实战操作。文章深入探讨了DDR4信号完整性问题,介绍了SystemSI工具链的演进与分工,并提供了从前期准备到高级技巧的详细指南,帮助工程师有效解决DDR4设计中的信号完整性问题。

weixin_30505225的博客 510

Rider或IDEA在使用中的一些可以加快开发效率的设置

Rider有一些很细小的快捷设置,可以大大的增加平常写代码的效率 1.增大同时打开的页签数量: 2.多行显示所有打开的脚本页签: 3.对所有打开的页签排序: 4.标记未保存修改的文件: 5.在左侧Project Tab中展示选中文件的目录结构:............

啸风轩 1万+

让 RAP 弹窗参数真正变成必填:Excel Upload Action 的两种实现路径

摘要 在RAP应用中,action弹窗参数经常缺乏必填校验,导致用户体验差。本文提出两种解决方案:1)在action实现中手动校验,简单但交互不流畅;2)通过root abstract entity和abstract BDEF建模,利用field(mandatory)实现框架级校验,推荐此长期方案。后者将约束集中到模型层,使UI与执行期校验一致,特别适合ABAP Cloud环境。以Excel导入为例,强制填写备注和明确选择试运行,可避免审计问题,提升系统可靠性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 198

【Unity小游戏】整整一个周末写一款《皇室战争 玩法》 的 即时战斗类 游戏Demo。两万多字游戏制作过程+解析

Unity游戏制作,本篇文章介绍了复刻皇室战争玩法的一个自制小游戏,共有该游戏的两万字教程加制作过程,欢迎品尝! 世界上没有绝对的公平,如果我们起点就比别人第一步,那就更需要比别人努力了。

努力前行,总会成为自己心中的那道光 12万+

Rider打Lua断点时没有跳转到对应的行数

这里要把工作根目录添加进去,然后重启Rider即可。

fcgdzh2008的博客 989

PCL实现STL文件读取和转换为PCD格式

本文介绍如何使用点云库(Point Cloud Library,PCL)读取STL(Standard Triangle Language)文件,并将其转换为点云数据(PointCloud Data,PCD)格式。通过将STL文件转换为PCD格式,我们可以更方便地处理和分析点云数据。本文介绍了如何使用PCL库读取STL文件并将其转换为PCD格式的点云数据。以上是关于PCL读取STL文件并转存为PCD格式的简要介绍和示例源代码。下面的示例展示了如何将STL文件转换为PCD格式。函数将点云数据保存为PCD文件。

ByteEchoX的博客 805

Lua自定义方式加载模块

很多人苦于lua脚本被别人破解导致整个游戏被他人抄袭而苦恼,现在来说说最近刚研究通的一种修改办法,可以加载自己加密过的脚本,而且又不会导致普通的lua脚本无法执行,这样既可以运行加密脚本也可以运行普通的脚本,这是多么爽的一件事情。 好了接下来我直接给出我们需要修改的地方;打开文件loadlib.c这个文件我们可以看到有几个函数loader_Lua,loader_C等函数;我们可以仿写一个 ,实现

C++,Lua,python3 3193

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

以自定义方式加载 lua 模块[云风blog]

今天我们的一个小项目开始做内部测试发布前的资源打包。这个项目基本上是用lua做开发的。整个开发过程中,我们的代码是直接把 Lua 源代码放在项目的发布目录下的。发布版因为安全或是整洁等种种原因,我们必须给所有的脚本代码打包。 这种事情以前在大话2里也干过,当时用的 lua 4.0 而且也没多少经验,我们是直接去修改的 lua 的代码,适应我们的打包格式。这次,不想这么干了。希望能够完全...

weixin_30779691的博客 185

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

0基础lua学习(十二)Lua 模块与包

Lua 模块与包模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。以下为创建自定义模块

小鱼酱的博客 950

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

十三、一起学习Lua 模块与包

模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。由上可知,模块的结构就是一个 table 的结构,因此可以像操作调用 table 里的元素那样来操作调用模块里的常量或函数。...

m0_66404702的博客 328

解析Lua中的全局环境、包、模块组织结构

Lua中也拥有和Python世界相似的代码的作用范围和组织方式,下面我们就来简单解析Lua中的全局环境、包、模块组织结构,需要的朋友可以参考下 模块就是一个程序库,而包是一系列模块。Lua中可以通过require来加载模块,然后得到一个全局变量表示一个table。Lua将其所有的全局变量保存在一个被称为“环境”的常规table中。本文首先介绍环境的一些实用技术,然后介绍如何引用模

章志强的专栏 2065

[转]使用 C 编写 Lua 模块

Lua 作为一种小巧的语言,一般都是嵌入到 C/C++ 中作为扩展语言,但是也可以作为独立的脚本语言使用,并且可以使用 C/C++ 编写扩展模块。在参考资料 [1] 中有怎样用 C/C++ 编写模块的介绍,但是比较零散,也不是很详细,所以在这里整理一下。   这里使用的 Lua 版本是 5.2.3,系统是 Debian 7。 Hello, world! 不废话,还是先看一下经典的 “Hel...

weixin_33857679的博客 133

无法加载模块:public_Lua模块与包

--[[ 模块是类似于一个封装库,Lua5.1开始,Lua加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以API的接口形式在其他地方调用 Lua的模块是由变量、函数等元素组成的table,所以要创建一个模块很简单,就是创建一个表,然后把需要导出的常量、函数放到创建的表中,最后使用return吧这个表返回去。 创建自定义模块]]--[[-- 把下面的代码存放到文件名为...

weixin_42425334的博客 530

Lua的require小结

在游戏开发中会经常使用到lua作为游戏逻辑层的脚本语言,各种优势就不说了,虽然平时用的比较多,但对lua语言本身和内部的一些实现并不是很了解,让我们先从lua的require入手来一探require的各种用法吧。 require其实类似与C/C++中的#include,就是加载一个指定名称的模块进来,该模块可以来自于lua,也可能来自于C/C++,在lua虚拟机启动时,默认会给我们预先加载好一些模块,保存在package.loaded中,我们可以实际打印一波看看: for k, v in pairs(

9150

Lua 模块与包 调用c程序.so文件

Lua 模块与包 调用c程序.so文件 Lua 模块与包 模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。 Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,...

hanyingzhong的专栏 930

cocos2d-2.1rc0-x-2.1.3使用lua

需要包含的头文件: E:\cocos2d-2.1rc0-x-2.1.3\scripting\lua\lua E:\cocos2d-2.1rc0-x-2.1.3\scripting\lua\tolua E:\cocos2d-2.1rc0-x-2.1.3\scripting\lua\cocos2dx_support 加入lib的链接:liblua.lib,lua51.lib

WHW的博客 1637

Lua_模块与包_009

模块声明Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。以下为创建自定义模块 module.lua,文件代码格式如下:– 文件名为 module.lua – 定义一个名为 module 的模块 module = {}– 定义一个常量 module.constant =

杨勇博客之家 431

Lua package

lua和其他语言一样,也有模块/包的概念,稍微有点不同的是,默认先从环境变量LUA_PATH中搜索 lua文件,如果搜索不到,则从LUA_CPATH中搜索C文件。 对于我来说,时而去改变环境变量,则显得麻烦,并且在另外的环境中部署时还要修改环境变量,则显得不人性化,因此,觉得如下方式增加搜索路径比较 好:   --将自定义包路径加入package的 搜索路径中。也可以加到环境变量

MyObject-C的专栏 941
上一篇: Lua内存泄漏应对方法
下一篇: Lua自定义方式加载模块
cbbbc
博客等级 码龄15年 609粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值