Lua学习笔记:debug.sethook函数

news2024/12/23 8:50:50
前言
本篇在讲什么

使用Lua的debug.setHook函数
本篇需要什么

Lua语法有简单认知
依赖Sublime Text工具

本篇的特色

具有全流程的图文教学
重实践,轻理论,快速上手
提供全流程的源码内容


★提高阅读体验★

👉 ♠ 一级标题 👈

👉 ♥ 二级标题 👈

👉 ♣ 三级标题 👈

👉 ♦ 四级标题 👈

目录

  • ♠ 前言
  • ♠ sethook
    • ♥ 注册函数执行时触发的钩子
    • ♥ 注册函数返回时触发的钩子
    • ♥ 注册执行新一行代码时触发的钩子
    • ♥ 注册根据指令数触发的钩子
  • ♠ 推送
  • ♠ 结语


♠ 前言

重点了解一下debug.sethook函数


♠ sethook

将一个函数作为钩子注册起来,符合指定逻辑的时候会被调用

其原型函数为定义在c源码ldblib.c中的db_sethook函数,如下图所示

在这里插入图片描述

其一共三个参数,在lua中的使用如下所示

local count = 0
local mask = "crl"
local func = function()
end

debug.sethook(func, mask, count)

参数1:func被注册的函数
参数2:钩子掩码,有三个参数可供选择

  • c: 每次Lua调用函数时都会调用该钩子
  • r: 每次Lua从函数返回时都会调用该钩子
  • l: 每次Lua进入新一行代码时,都会调用该钩子

参数3:钩子在每次count指令之后被调用

注意:参数2可以使用拼接字符,例如"crl"


♥ 注册函数执行时触发的钩子

我们注册一个在每次函数调用后都会备执行的钩子,代码如下所示,钩子掩码设置为c,测试函数testFunc调用几次,钩子就被执行几次

在这里插入图片描述


♥ 注册函数返回时触发的钩子

我们用相同的代码,只不过钩子掩码改成了r,我们发现在触发自定义函数返回前会有默认三次触发,可能是一些内置函数之类的吧,这里先不往深处追了,除此之外没执行完一次函数调用一次触发

在这里插入图片描述


♥ 注册执行新一行代码时触发的钩子

掩码l在执行新一行代码的时候会触发钩子,可以直接用函数print打印出来对应行号

在这里插入图片描述


♥ 注册根据指令数触发的钩子

当第三个参数不等于1,且第二个参数为空字符串的时候,此时第三个参数的数量,执行指定命令后调用钩子

在这里插入图片描述


♠ 推送

  • Github
https://github.com/KingSun5

♠ 结语

若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。

👉 本文属于原创文章,转载请评论留言,并在转载文章头部著名作者出处👈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1044606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第五章:C语言的数组

文章目录 1、数组的理解2、各类数组的定义3、变长数组4、字符数组 1、数组的理解 一维数组:比如定义一个int a[3];,那么可以将其看成两部分,a【3】为①,int为②。意思就是有一个数组名字为a,里面包含3个(池&#xff0…

QT5自定义下拉框为QTreeView类型(树形分上下级)的下拉框(QComboBox)(超详细步骤)

项目开发中,很可能简单的QComboBox满足不了需求,就需要自定义QComboBox。 先看效果。 自定义ComboBox 1、先建立一个project,命名为CustomComboBox,建立一个project的过程不细说了。建立后的工程目录如下图: 2、在项目名CustomCo…

React 全栈体系(十六)

第八章 React 扩展 五、Context 1. 代码 /* index.jsx */ import React, { Component } from react import ./index.css//创建Context对象 const MyContext React.createContext() const {Provider,Consumer} MyContext export default class A extends Component {state …

蓝桥杯每日一题20223.9.26

4407. 扫雷 - AcWing题库 题目描述 分析 此题目使用map等都会超时,所以我们可以巧妙的使用哈希模拟散列表,哈希表初始化为-1首先将地雷读入哈希表,找到地雷的坐标在哈希表中对应的下标,如果没有则此地雷的位置第一次出现&#…

2023彩虹商城自助发卡商城+卡卡云模板+wxstore模板

2023彩虹商城自助发卡商城免授权版卡卡云模板wxstore模板 全新SUP模板/知识付费模板/卡卡云模板,首页美化,登陆页美化,修复了pc端购物车页面显示不正常的问题。

RabbitMQ的工作模式——WorkQueues模式

1.工作队列模式 生产者代码 public class Producer_WorkQueues1 {public static void main(String[] args) throws IOException, TimeoutException {//1.创建连接工厂ConnectionFactory factory new ConnectionFactory();//2.设置参数factory.setHost("172.16.98.133&qu…

动态线程池框架DynamicTp v1.1.4大版本发布,新增若干实用特性

DynamicTp 简介 DynamicTp 是一个基于配置中心实现的轻量级动态线程池监控管理工具,主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。 DynamicTp 特性 代码零侵入:我们改变了线程池以往的使用姿势,所有配置均放…

【算法】直接插入排序

文章目录 概念实现过程时间复杂度和空间复杂度代码示例 总结 概念 直接插入排序(Insertion Sort)是一种简单直观的排序算法,它的基本思想是通过构建有序的子序列,逐步将无序的元素插入到有序序列中,最终实现整体的排序…

【python基础】—内置模块os常用功能介绍

文章目录 前言一、模块变量os.nameos.environ 二、文件与文件夹os.getcwd(path)os.chdir(path)os.listdir(path)os.mkdir(path)os.remove(path)os.rename(src,dst) 三、os的子模块:Path模块os.path.abspath(path)os.path.basename(path)os.path.dirname(path)os.pat…

软件设计模式——桥接模式

摘要 桥接模式(Bridge pattern): 使用桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变。 一、桥接模式的意图 将抽象与实现分离开来,使它们可以独立变化。 二、桥接模式的类图 Abstraction: 定义抽象类的接口Implementor: 定义实现类接口 …

C++标准模板(STL)- 输入/输出操纵符-(std::resetiosflags,std::setiosflags)

操纵符是令代码能以 operator<< 或 operator>> 控制输入/输出流的帮助函数。 不以参数调用的操纵符&#xff08;例如 std::cout << std::boolalpha; 或 std::cin >> std::hex; &#xff09;实现为接受到流的引用为其唯一参数的函数。 basic_ostream::…

【计算机视觉】3.传统计算机视觉方法

传统计算机视觉方法 一、大纲图像分割人脸检测行人检测 二、图像分割基于阈值检测的方法基于边缘检测的方法基于区域的分割方法基于图论的分割方法 三、人脸检测四、行人检测五、SVM六、DPM 一、大纲 图像分割 基于阈值、基于边缘 基于区域、基于图论 人脸检测 Haar-like 特征…

渗透测试之——信息收集思路

请遵守网络安全法 渗透测试时要和客户定好时间再使用扫描器。 渗透测试切记不要渗透客户所给域名的同级域名&#xff0c;可以渗透所给域名的子域名。信息收集永远是渗透测试的第一步。 1. 测试目标 xiusafe.com 2. 域名与ip 渗透测试中IP比域名更适合做渗透&#xff1b; …

Elasticsearch 集群时的内部结构是怎样的?

Apache Lucene : Flush, Commit Elasticsearch 是一个基于 Apache Lucene 构建的搜索引擎。 它利用 Lucene 的倒排索引、查询处理和返回搜索结果等功能来执行搜索。 它还扩展了 Lucene 的功能&#xff0c;添加分布式处理功能以支持大型数据集的搜索。 让我们看一下 Apache Luc…

网络通信(套接字通信)(C/C++)

1.网络编程必知概念 1.广域网和局域网 广域网:又称外网、公网。是连接不同地区局域网或城域网进行计算机通信的远程公共网络。 局域网:在一定的通信范围内,有很个多计算机组成的私有网络就叫局域网。(这些计算机相互之间是可以通信的,但是不能直接访问外网(可以通过网线…

ElementUI -- Mock.js介绍和使用与首页导航栏左侧菜单搭建

1.1 mockjs介绍 Mock.js是一个用于生成随机数据和模拟接口请求的JavaScript库。它可以帮助开发人员在前端开发过程中模拟后端接口的返回数据&#xff0c;以便进行前端页面的开发和测试。 Mock.js有两个重要的特性风靡前端: 数据类型丰富 Mock.js提供了一套简单易用的API&#x…

FL Studio21编曲软件好不好用?值得下载吗

现在的编曲界&#xff0c;鱼龙混杂&#xff0c;很多垃圾软件都来滥竽充数&#xff0c;能入流的编曲软件真的是屈指可数。而编曲业的缺口却又如此之大&#xff0c;所以各类货色都想入行分一杯羹。然而没有实力注定就没有市场而FL Studio又是一款非常著名&#xff0c;实力超群的编…

CTF_BUUCTF_MIS解题_05大白

题目地址&#xff1a;BUUCTF在线评测 文件下载解压之后发现真是一个大白 但是这个大白越看越不对劲&#xff0c;怎么下半身给整没了呢&#xff1f; 随机考虑到图片高度的隐写&#xff0c;杀手锏winhex上场&#xff0c;高度改高一下看看 flag已出现&#xff1a;flag{He1l0_d4_…

面试打底稿③ 专业技能的第三部分

简历原文 抽查部分 基本了解RabbitMQ、Elasticsearch等微服务技术&#xff0c;对分布式事务、分布式缓存等有所学习&#xff1b;熟悉数据库的基本操作&#xff0c;写过C#与数据库交互的项目&#xff1b; 模拟问答 1.你是如何保障消息可靠性的 从消息生产者到交换机&#x…

C语言 数据类型

变量声明 格式&#xff08;变量类型变量名称&#xff09; 变量类型&#xff1a;整数类型&#xff08;int&#xff09;&#xff0c;浮点数类型&#xff08;float&#xff09; float类型可以存储带小数的数字。 用printf()打印变量&#xff0c;使用%d来处理整数值&#xff0c…