论文学习_Directed Greybox Fuzzing
摘要:现有的灰盒模糊测试工具(Greybox Fuzzers,简称GF)在测试引导性方面存在明显不足,比如难以有效地将测试引导至特定的高风险变更或补丁、关键系统调用、危险代码位置,或是试图重现漏洞时涉及的堆栈追踪中的相关函数。为此,有研究者提出了“定向灰盒模糊测试”(Directed Greybox Fuzzing,简称DGF)的概念,其核心目标是生成能高效触达指定程序位置的输入。为实现这一目标,他们设计了一种基于模拟退火策略的能量分配机制:该机制会逐步给予更接近目标位置的测试用例(种子)更多的执行机会(能量),而对距离目标较远的种子则降低优先级。在实验中,研究人员基于该方法实现了名为AFLGo的工具,结果显示DGF不仅优于传统的无方向灰盒模糊测试,同时在效果上也超越了依赖符号执行的定向白盒模糊方法。该方法还被用于补丁验证和崩溃复现等场景,并已集成进Google的持续模糊测试平台OSS-Fuzz。由于具备明确的定向性,AFLGo在多个已被广泛模糊测试、具安全敏感性的项目(如LibXML2)中发现了39个漏洞,其中17个获得了CVE编号。
白盒模糊测试:是一种基于程序内部信息(如源码或字节码)进行输入生成的模糊测试方法。它通常结合程序分析技术(如符号执行、抽象解释或路径约束求解)来系统性探索程序路径,目的是最大化代码覆盖并触发潜在缺陷。需要源码或中间表示
灰盒模糊测试:是一种在不知道完整程序逻辑的前提下,通过轻量级运行时插桩收集反馈信息(如路径覆盖)来指导输入生成的模糊测试方法。它在效率与效果之间寻求平衡。不需要源码,仅需可执行文件并配合插装机制
黑盒模糊测试:是一种完全不依赖程序内部结构,仅依赖输入输出行为的模糊测试方法。它通过盲目地变异输入并观察程序响应来发现异常行为。不需要源码或执行信息
代码插装:在程序的原始代码或中间表示中,插入额外的代码或逻辑,以在程序运行时收集特定信息或实现特定目的的技术。它通常用于调试、性能分析、安全检测、测试覆盖率评估、模糊测试等场景。静态插装需要源码,动态插装不需要源码
引言
灰盒模糊测试(Greybox Fuzzing,简称GF)被广泛认为是当前漏洞检测领域的主流技术。该方法通过轻量级插桩手段,在几乎不影响程序性能的前提下,为每个输入所覆盖的执行路径分配一个唯一标识。模糊测试过程中,新输入通过对初始种子输入进行变异产生,若这些新输入触发了此前未覆盖或具有探索价值的路径,就会被加入模糊器的待测队列。AFL作为该技术的代表工具,不仅在实际应用中揭示了大量高危漏洞,还曾成功从“空白输入”生成结构合法的图像文件,并吸引了大量安全研究人员参与其功能扩展与改进。引出灰盒模糊测试
然而,现有的灰盒模糊测试工具在测试引导方面依然存在明显局限。具备引导能力的模糊测试器对于安全研究人员而言是一种重要的辅助工具,定向灰盒模糊测试。与传统的无方向模糊测试不同,定向模糊器会将大部分测试资源集中用于抵达特定的目标位置,避免将计算能力浪费在与目标无关的程序部分上。这类工具通常适用于一些特定场景:
- 在补丁测试中,可以将变更语句设定为模糊测试的目标位置,以“心脏出血”漏洞的引入为例,其相关的提交记录明确展示了这一问题。如果模糊器能够聚焦于这些具体改动位置,便有更高的可能性发现由修改引发的功能回退或安全缺陷。
- 崩溃复现场景中,可以将堆栈追踪中的方法调用位置设为测试目标。当线上环境出现崩溃问题时,开发团队通常只能收到堆栈追踪信息和部分运行环境参数,而出于用户隐私保护的考虑,具体触发崩溃的输入数据往往无法获取。此时,定向模糊测试工具能够帮助内部团队快速重现问题,从而定位和修复故障源头。
- 静态分析报告验证中,可以将静态分析工具标记为潜在风险的语句位置设为模糊测试目标。以某个工具识别出第1480行代码可能存在缓冲区溢出为例,定向模糊器能够生成特定输入,验证该隐患是否真实存在,从而辅助确认漏洞的可达性和实际影响。
- 信息流检测场景中,也可以将敏感源和敏感汇作为模糊测试的目标位置。为了发现数据泄露类漏洞,安全研究人员通常希望构造出既能触发包含隐私信息的敏感数据源,又能到达将数据暴露给外部环境的敏感汇的执行路径。定向模糊器在这一类任务中表现出较高的效率,能够有效生成所需的执行流程,从而揭示潜在的敏感信息泄漏风险。
目前,大多数定向模糊测试工具仍以符号执行为核心方法。符号执行是一种白盒模糊测试技术,它结合程序分析与约束求解,能够合成出覆盖不同程序路径的输入。在实现定向模糊测试器时,符号执行因其系统化的路径探索能力,一直是被优先采用的技术手段。假设在控制流图中存在一条通往目标位置的路径π,符号执行引擎可以为这条路径构造出一个路径条件,即一阶逻辑公式φ(π),该公式在且仅在所有能够覆盖路径π的输入上成立。若该条件可满足,SMT(可满足性模理论)求解器便能生成一个实际输入t,作为公式φ(π)的解,从而使输入t成功触发包含目标位置的路径π。符号执行是一种白盒模糊测试技术,该技术需要源码

定向符号执行(DSE)将可达性问题转化为一个迭代求解约束的过程。由于大多数路径在实际中都是不可行的,因此搜索过程通常是通过逐步找到可行路径以接近中间目标来推进的。举个例子,补丁测试工具 Katch 使用符号执行引擎 Klee 来尝试到达某个被修改的代码语句。如果将图 1 中的第 1480 行设为目标,Katch 可能首先找到了一条可行路径 π₀,该路径可以到达第 1465 行这个中间目标。接下来,Katch 会将路径 π₀ 所对应的约束条件 φ(π₀) 与条件 (hbtype == TLS1_HB_REQUEST) 一起提交给约束求解器,以生成一个能够真正触达第 1480 行目标位置的输入。与灰盒模糊测试工具不同,基于符号执行的白盒模糊测试方法在实现定向模糊测试时,具备天然的便利性。
然而,DSE 的有效性是以效率为代价的。它在每次迭代中都需要耗费大量时间进行繁重的程序分析与约束求解。具体来说,DSE 通过程序分析找出那些需要被反转的分支,以便更接近目标位置;然后,根据这些路径上的指令序列构建路径条件;最后,使用约束求解器判断这些条件是否可满足。而在 DSE 生成一个输入的时间内,灰盒模糊测试工具可以执行数量级多得多的输入。这就为开发轻量级且具备定向能力的灰盒模糊测试工具提供了机会。以相同的初始输入为起点,当目标是图 1 中的某次提交时,定向灰盒模糊器 AFLGo 能在不到 20 分钟内触发 Heartbleed 漏洞,而 DSE 工具 Katch 即使运行 24 小时也无法触发该漏洞。定向灰盒模糊测是效率更高
这项研究提出了一种名为定向灰盒模糊测试(DGF)的方法,其核心目标是引导模糊测试尽可能地接近程序中的特定目标位置。从整体上看,DGF 将可达性问题建模为一个优化问题,并借助特定的元启发式算法来最小化生成输入与目标之间的“距离”。为计算这一“种子距离”,方法首先会静态计算并插装每个基本块到目标位置的距离。尽管这种距离度量是跨过程的,但其新颖之处在于,仅需对整个调用图进行一次分析,并分别对每个过程内控制流图分析一次即可。在运行时,模糊器会收集每个被执行的基本块的距离值,并通过求平均得到当前输入的种子距离。为了最小化该距离,DGF 所采用的元启发式方法是模拟退火,并通过“功率调度”机制实现。功率调度决定了每个种子的能量,也就是用于模糊测试该种子所花费的时间。与所有灰盒模糊技术类似,DGF 通过将分析工作转移到编译阶段,从而有效降低了运行时的开销。
与现有的定向白盒模糊测试方法不同,DGF 将程序中目标位置的可达性问题转化为一个优化问题,而传统方法则是将这一问题建模为一个迭代的约束求解过程。
研究动机
以 Heartbleed 漏洞为案例和出发点,研究者探讨了定向模糊测试的两种不同实现路径。传统上,定向模糊测试通常依赖于符号执行方法。在这里,研究对比了基于符号执行引擎 Klee 的补丁测试工具 Katch 与本文提出的定向灰盒模糊测试实现 AFLGo,后者正是基于灰盒策略开发的一种新型定向模糊工具。
Heartbleed漏洞:(CVE-2014-0160)是一种严重漏洞,它破坏了通过被认为是安全的协议(如 SSL/TLS)传输的数据的机密性与完整性。图 1 展示了引入该漏洞的提交代码片段。值得注意的是,Heartbleed 的利用不需要中间人攻击(MITM)。设想一个场景:Bob 持有一个秘密,而攻击者 Mallory 试图获取它。Bob 首先从 Mallory 发来的消息中读取消息类型和负载数据;如果该消息属于特定类型,Bob 会将响应消息的类型与负载设置为相同。随后,Bob 会将负载字段指定数量的字节从输入消息(pl)复制到输出消息(bp)中。如果 pl 实际分配的空间小于负载字段所声明的长度,Bob 就可能在复制过程中将自己的秘密一并泄露出去。Heartbleed 在被引入 OpenSSL 库两年后才被发现,期间这一漏洞已经被广泛传播。截至 2016 年 4 月,仍有约 25 万台设备处于易受攻击状态。
补丁测试:Heartbleed 漏洞是在 2011 年新年前夕被引入的,源于一次实现名为 Heartbeat 的新功能的提交(编号 4817504d)。如果当时使用一种以变更语句为目标位置的定向模糊测试工具,或许就能在漏洞被引入时及时发现,从而避免其大范围传播。如今,OpenSSL 的代码规模已接近 50 万行,而引入该漏洞的那次提交仅新增了 500 多行代码。显然,在整体代码中只有少量最近变更部分可能存在缺陷的情况下,对整个 OpenSSL 进行无差别的模糊测试无疑是一种资源浪费。相比之下,定向模糊测试能更高效地聚焦这些新增或修改部分。当前,大多数补丁测试工具都采用定向符号执行的方法,例如 Katch、PRV、MATRIX、CIE、DiSE,以及 Qi 等人提出的测试工具。其中,Katch 被广泛认为是自动化补丁测试领域的代表工具,且易于获取,因此被选作动机示例中的比较对象。
尽管基于定向符号执行的白盒模糊测试在效果上表现出色,但其代价也极其高昂。由于依赖重量级的程序分析过程,像 Katch 这样的工具在生成有效输入时往往耗时较长。在实际实验中,Katch 在 24 小时内都无法检测出 Heartbleed 漏洞。AFLGo 是一种高效的定向灰盒模糊测试工具,每秒可生成并执行数千个输入,在不到 20 分钟的时间内就能触发 Heartbleed 漏洞。它所实现的定向灰盒模糊测试技术几乎不依赖运行时程序分析,仅在编译或插桩阶段进行轻量级分析。定向灰盒模糊测是效率更高
研究内容
定向灰盒模糊测试(DGF)是一种以用户指定的目标位置为导向的漏洞检测技术,在保持灰盒模糊测试高效性的同时,避免了运行时程序分析的开销——所有相关分析都在编译阶段完成。这种方法易于并行扩展,便于根据计算资源的变化动态分配任务。此外,DGF 支持同时指定多个目标位置,并引入了一种跨过程的距离度量方式,用于衡量测试输入与目标位置之间的接近程度。这一距离在插桩阶段就被预先计算完毕,运行时可高效读取。虽然该距离度量覆盖多个过程,但其程序分析实际是基于调用图(CG)与过程内控制流图(CFG)进行的过程内分析,相比真正的跨过程分析可实现平方级别的性能节省。CG 与 CFG 都可以直接从 LLVM 编译框架中获取。基于这一新颖的距离定义,DGF 进一步提出了一种新的功率调度策略,并引入模拟退火中的经典指数冷却机制。该机制会逐步为更接近目标位置的种子分配更多能量,而对距离较远的种子则减少资源投入,从而更有效地引导模糊测试过程。
灰盒模糊测试
为了阐明定向灰盒模糊测试的实现方式,研究首先介绍了灰盒模糊测试的基本原理,并指出了距离插桩与基于退火的功率调度机制在其中的具体实现位置。“模糊测试”这一术语起源于 1990 年代,当时 Miller 等人使用随机测试工具对 UNIX 工具的可靠性进行了研究。如今,模糊测试根据程序分析程度的不同通常分为三类:(1)黑盒模糊测试不依赖任何程序内部信息,只需能执行程序本体即可;(2)白盒模糊测试则依赖符号执行,涉及复杂的程序分析与约束求解;(3)灰盒模糊测试介于两者之间,它通过轻量级的插桩手段获取程序的部分结构信息。在没有程序分析负担的前提下,灰盒模糊测试通常比白盒测试更高效;而在获取部分内部结构信息的基础上,它的有效性也往往优于完全盲目的黑盒模糊测试。
以 AFL 和 LibFuzzer 为代表的基于覆盖信息的灰盒模糊测试器(CGF)通常通过轻量级插桩来获取程序的覆盖情况。例如,AFL 的插桩机制能够记录基本块之间的跳转关系,以及大致的分支命中次数。这类模糊器会依据覆盖信息来判断哪些输入应被保留用于进一步模糊测试、接下来应选择哪个输入进行变异,以及为每个输入分配多少测试时间。在此基础上,研究者对插桩机制进行了扩展,使其还能记录每个选中种子与预设目标位置之间的距离。为了计算这种距离,需要在调用图和过程内控制流图中查找目标节点的最短路径,这些结构可以直接从 LLVM 中获取。最短路径分析采用的是经典的 Dijkstra 算法实现。
算法 1 展示了基于覆盖信息的灰盒模糊测试(CGF)的基本工作流程。模糊器接收一组初始种子输入 S,并在一个持续循环中不断从中选择输入 s,直到达到超时时间或测试被终止。输入选择的过程由函数 chooseNext 实现,例如,AFL 的策略是按添加顺序从一个循环队列中依次选取种子。选定输入 s 后,CGF 会通过 assignEnergy(第 3 行)计算该输入应生成的新测试用例数量 p,该步骤中也融入了基于模拟退火的功率调度策略。随后,模糊器根据预定义的变异操作对 s 进行随机修改,生成 p 个新输入,变异逻辑由 mutate_input(第 5 行)实现。AFL 常用的变异策略包括位翻转、简单算术运算、边界值替换以及代码块的插入与删除等。如果某个新输入 s′ 能覆盖新的分支,就会被加入循环队列(第 9 行);若 s′ 导致程序崩溃,则将其加入崩溃输入集合 S✗(第 7 行)。如果该崩溃输入具有特异性,还会被标记为“唯一崩溃”,用于后续分析。
Böhme 等人指出,基于覆盖的灰盒模糊测试(CGF)可以被建模为一个马尔可夫链。在该模型中,状态 i 表示程序中的一条具体执行路径,而从状态 i 转移到状态 j 的概率 pij 表示:对一条路径 i 上的种子进行模糊变异后,生成的新种子执行路径 j 的可能性。研究发现,CGF 工具会明显更频繁地执行某些“高频路径”,而其他路径则较少被覆盖。马尔可夫链的平稳分布密度形式化地描述了模糊器在经过若干轮测试后某条路径被触发的概率。为了解决高频路径过度占用资源的问题,研究者提出了一种方法,通过根据路径邻域的密度调整每个种子生成的新输入数量,从而引导模糊器更多地探索低频路径。这一策略被集成进 AFL 的衍生版本 AFLFast 中。在此框架下,每个种子 s 所生成的新输入数量被称为该种子的“能量”,其大小由“功率调度”机制决定。需要注意的是,能量是马尔可夫链中局部状态的属性,而与之相对的模拟退火中的“温度”则是一个全局属性。能量对应每个种子生成的新输入的数量
相关文章:
论文学习_Directed Greybox Fuzzing
摘要:现有的灰盒模糊测试工具(Greybox Fuzzers,简称GF)在测试引导性方面存在明显不足,比如难以有效地将测试引导至特定的高风险变更或补丁、关键系统调用、危险代码位置,或是试图重现漏洞时涉及的堆栈追踪中…...
《MySQL:MySQL视图特性》
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响基表,基表的数据变化也会影响视图。 创建视图 create view 视图名 as select语句; 删除视图 drop view 视图名; 视图规则与限…...
Flutter——数据库Drift开发详细教程(六)
目录 1.视图2.视图中列的可空性3.DAO4.流查询5.高级用途6.注意事项 1.视图 也可以将SQL 视图定义 为 Dart 类。为此,请编写一个抽象类来扩展View。此示例声明了一个视图,用于读取示例中架构中某个类别中添加的待办事项数量: abstract class C…...
PCIe数据采集系统
PCIe数据采集系统 一、模块功能划分与职责 1. 时钟管理模块 (clock_manager) 核心功能: 生成系统所需的多时钟信号(100MHz 系统时钟、125MHz PCIe 时钟、200MHz DDR3 时钟)。 关键接口: 输入:系统主时钟 sys_clk、P…...
mac docker弹窗提示Docker 启动没有响应
一、原因分析 这台笔记电脑是Mac M3操作系统,安装Docker之后,Docker应用程序一直启动不起来。 二、解决办法 sudo rm /Library/PrivilegedHelperTools/com.docker.vmnetd sudo cp /Applications/Docker.app/Contents/Library/LaunchServices/com.docker.vmnetd /Library/Pri…...
TVS管用万用表测量方法详解(含二极管档使用指南)
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 TVS管(瞬态抑制二极管)是一种用于保护电路免受瞬态高电压冲击的半导体器件。其核心功能是通过快速导通将过压钳位在安全范围内。本文将重点介绍如何用万用表测量…...
当下流行的智能体通信协议:MCP、A2A、ANP 分别是什么?
在当前人工智能(AI)智能体生态系统中,智能体之间的有效沟通至关重要。为了让AI智能体能够高效、安全地协同工作,业界提出了多种通信协议。其中,MCP、A2A 和 ANP 代表了三个关键层级的通信协议,各自应对不同…...
中国近代史2
甲午中日战争(1894-1895) 1.开始的标志:丰岛海战 2.进程 平壤之战:清军统帅叶志超不战而降,回民将领左宝贵以身殉职 黄海海战(大东沟海战):北洋水师黄海遭遇日本舰队,水…...
Ubnutu ADB 无法识别设备的解决方法
1. 正确安装adb 下载地址 2. 检查 Linux 是否识别设备 lsusb通过上述指令,分别查询插入、断开设备的usb设备表,如下所示: # 插入设备 adbc:~$ lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 011:…...
基于策略的强化学习方法之近端策略优化(PPO)深度解析
PPO(Proximal Policy Optimization)是一种基于策略梯度的强化学习算法,旨在通过限制策略更新幅度来提升训练稳定性。传统策略梯度方法(如REINFORCE)直接优化策略参数,但易因更新步长过大导致性能震荡或崩溃…...
前端图形渲染 html+css、canvas、svg和webgl绘制详解,各个应用场景及其区别
在前端开发中,HTMLCSS、Canvas、SVG 和 WebGL 是实现图形渲染的四种常见技术。它们各自具有不同的特点和适用场景。以下是对这四种技术的详细解析: 1. HTML CSS 特点: 主要用于构建网页的结构和样式。通过 CSS 可以实现简单的图形效果&am…...
《Navicat之外的新选择:实测支持国产数据库的SQLynx核心功能解析》
数据库工具生态的新变量 在数据库管理工具领域,Navicat长期占据开发者心智。但随着国产数据库崛起和技术信创需求,开发者对工具的兼容性、轻量化和本土化适配提出了更高要求。近期体验了一款名为SQLynx的国产数据库管理工具(麦聪旗下产品&am…...
Elasticsearch 快速入门指南
1. Elasticsearch 简介 Elasticsearch 是一个基于 Lucene 的开源分布式搜索和分析引擎,由 Elastic 公司开发。它具有以下特点: 分布式:可以轻松扩展到数百台服务器,处理 PB 级数据实时性:数据一旦被索引,…...
解决Mawell1.29.2启动SQLException: You have an error in your SQL syntax问题
问题背景 此前在openEuler24.03 LTS环境下的Hive使用了MySQL8.4.2,在此环境下再安装并启动Maxwell1.29.2时出现如下问题 [ERROR] Maxwell: SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version f…...
【Conda】环境应用至JupyterLab
目录 ✅ 步骤一:激活你的 conda 虚拟环境 ✅ 步骤二:安装 ipykernel(如果尚未安装) ✅ 步骤三:将环境注册为 Jupyter 内核 ✅ 步骤四:启动 JupyterLab 并选择内核 🧼 可选:删除…...
英语六级听力
试卷结构考试内容数量听力理解长对话8*7.1分听力篇章7*7.1分讲话/报道/讲座10*14.2分考点分析 A. 理解明示的信息 理解主旨大意听懂重要信息或特定的细节理解说话人明确表达的观点、态度等B. 理解隐含的信息 推论隐含的意义判断话语的交际功能推断说话人的观点、态度等C. 运用…...
视差计算,求指导
通过SGBM算法算出来的视差图,照片是3072*3072的, numDisparities是112,bloksize是7 不知道怎么调整了,求指导...
各个历史版本mysql/tomcat/Redis/Jdk/Apache/gitlab下载地址
mysql 各版本下载地址: https://downloads.mysql.com/archives/community/ **************************************************************** tomcat 各版本下载地址: https://archive.apache.org/dist/tomcat/ ********************************…...
【Redis】压缩列表
目录 1、背景2、压缩列表【1】底层结构【2】特性【3】优缺点 1、背景 ziplist(压缩列表)是redis中一种特殊编码的双向链表数据结构,主要用于存储小型列表和哈希表。它通过紧凑的内存布局和特殊的编码方式来节省内存空间。 2、压缩列表 【1…...
计算机网络--第一章(上)
目录 1.计算机网络的概念 2.计算机网络的组成、功能 3.交换 3.1 电路交换 3.2 报文交换 3.3 分组交换 3.4 虚拟电路交换 4.交换的性能分析 4.1 电路交换 4.2 报文交换 4.3 分组交换 4.4 总结 5.计算机网络的分类 5.1 分布范围分类 5.2 传输技术分类 5.3 拓扑结…...
hbit资产收集工具Docker(笔记版)
1. 安装 Docker 在 Kali 系统中,首先更新软件源,并安装 Docker apt-get update && apt-get upgrade && apt-get dist-upgrade apt-get install docker.io docker-compose安装完成后,使用 docker -v 命令验证安装是否成功。…...
套路化编程:C# winform ListView 自定义排序
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
CSS3 变形
一、CSS3变形(Transform)是一些效果的集合,有以下几种: 平移(Translate):元素沿水平或垂直方向移动。旋转(Rotate):元素绕某点旋转一定的角度。缩放…...
【python基础知识】Day26 函数
一、函数的定义 函数是一段具有特定功能的、可重用的语句组,用函数名来表示。在需要使用函数时,通过函数名进行调用。函数也可以看作一段具有名字的子程序,可以在需要使用它的地方进行调用执行,不需要在每个执行的地方重复编写这些…...
C#中Action的用法
Action 是 C# 中委托的一种,用于封装无返回值的方法。它引用的方法不能有返回值,但可以有零个或多个参数。相比delegate委托,Action 委托的优点是不必显式定义封装无参数过程的委托,使代码更加简洁和易读。 1、delegate-委托 先…...
IOS CSS3 right transformX 动画卡顿 回弹
卡片从右往左滑动,在同时变换 width height right transformX的时候 在某些IPhone机型上 会有卡顿,在Chrome和Android等很多机型都是OK的,包括我的iphone 14 pro max. IOS 18.2 也是好的。但是,新的iPhone16 也会卡,会…...
ruskal 最小生成树算法
https://www.lanqiao.cn/problems/17138/learning/ 并查集ruskal 最小生成树算法 Kruskal 算法是一种用于在加权无向连通图中寻找最小生成树(MST)的经典算法。其核心思想是基于贪心策略,通过按边权从小到大排序并逐步选择边,确保…...
多系统环境下,如何构建高效的主数据管理体系?
企业信息化建设步伐不断加快,各类业务系统如雨后春笋般涌现,如ERP、CRM、SCM、MES等等。然而,系统繁多也带来了一个棘手的问题:数据孤岛。各系统间数据标准不一、信息不流通、口径不统一,导致企业主数据(如…...
Linux515 rsync定时备份
凌晨1时三分进行备份 源码 code: code指定文件夹定时备份rsync到备份机指定文件夹 一.环境配置(code,backup) 1.关闭防火墙 设置selinux相关为0 setenforce 0 /etc/selinux/config SELINUXdisable 分别配置 2.设置主机名 3.配置ip地址(…...
Claude官方63组提示词模板全解析:从工作到生活的AI应用指南
在当今AI技术飞速发展的时代,大模型如ChatGPT、Claude等已成为我们工作和生活中不可或缺的助手。然而,许多用户发现同样的AI工具在不同人手中能产生截然不同的效果——关键在于提示词(Prompt)的质量。 提示词是与AI沟通的桥梁,好的提示词能…...
C#中的typeof操作符与Type类型:揭秘.NET反射的基础
引言 在C#编程中,反射(Reflection)是一种强大的机制,它允许我们在运行时检查和操作类型、方法、属性等程序元素。而这种反射能力的核心就是typeof操作符和System.Type类。当我们希望动态加载程序集、创建对象实例、调用方法&…...
鸿蒙OSUniApp 实现的表单验证与提交功能#三方框架 #Uniapp
UniApp 实现的表单验证与提交功能 前言 在移动端应用开发中,表单是用户与应用交互的重要媒介。一个好的表单不仅布局合理、使用方便,还应该具备完善的验证与提交功能,以确保用户输入的数据准确无误。本文将分享如何在 UniApp 中实现表单验证…...
开源的跨语言GUI元素理解8B大模型:AgentCPM-GUI
一、模型概述 AgentCPM-GUI 是由清华大学自然语言处理实验室 (THUNLP) 和 ModelBest 联合开发的开源大模型。该模型基于 MiniCPM-V 架构,拥有 80 亿参数规模,是一个能够直接在终端设备上运行的轻量化智能体。它创新性地将多模态输入与 GUI 操作相结合&a…...
Function Calling
在介绍Function Calling之前我们先了解一个概念,接口。 接口 两种常见接口: 人机交互接口,User Interface,简称 UI应用程序编程接口,Application Programming Interface,简称 API接口能「通」的关键,是两边都要遵守约定。 人要按照 UI 的设计来操作。UI 的设计要符合人…...
星巴克中国要卖在高点
9%能否救70%的急? 作者|古廿 编辑|文昌龙 星巴克中国刚刚回暖,总部出售的计划再次提上日程。 5月15日,外媒又适时放出消息:星巴克将开始出售其在中国的股份。消息人士称,星巴克本周通过一位财务顾问向几位潜在投资…...
Docker实现MySQL数据库主从复制
一、拉取数据库镜像 docker pull mysql:5.7二、创建两个数据库(一主一从模式) mysql01(主) 1.docker run -d -p 3310:3306 -v /root/mysql/node-1/init:/docker-entrypoinit-initdb.d -v /root/mysql/node-1/config:/etc/mysql/conf.d -v /root/mysq…...
【物联网】基于树莓派的物联网开发【4】——WIFI+SSH远程登录树莓派
使用背景 没有有线网络,无屏幕如何远程登录?程序猫教大家如何通过电脑wifi热点的方式连接树莓派,ssh连接访问树莓派,包括putty开源远程工具进行连接,VNC远程桌面显示。 注:新手建议买一个树莓派配置的显示…...
CentOS7 OpenSSL升级1.1.1w
1.安装依赖 # openssl-3.4.0需要perl-IPC-Cmd perl-Data-Dumper yum -y install gcc* yum -y install perl-IPC-Cmd perl-Data-Dumper 2.备份、卸载旧OpenSSL 查找安装目录并备份 # whereis openssl openssl: /usr/bin/openssl /usr/lib64/openssl /usr/share/man/man1/op…...
高精度降压稳压技术在现代工业自动化中的应用
一、引言 在现代工业自动化的浪潮中,电源管理技术犹如隐藏在精密机械背后的智囊,虽不直接参与生产流程的逻辑决策,却是保障各类自动化设备稳定、高效运行的基石。高精度降压稳压技术,作为电源管理领域的核心分支,聚焦…...
鸿蒙OSUniApp制作动态筛选功能的列表组件(鸿蒙系统适配版)#三方框架 #Uniapp
使用UniApp制作动态筛选功能的列表组件(鸿蒙系统适配版) 前言 随着移动应用的普及,用户对应用内容检索和筛选的需求也越来越高。在开发跨平台应用时,动态筛选功能已成为提升用户体验的重要组成部分。本文将详细介绍如何使用UniA…...
Qt中控件的Viewport作用
在Qt中,viewport是控件中用于显示内容的一个概念区域,它在可滚动控件中尤为重要。以下是viewport的主要作用和特点: 主要作用 内容显示区域:viewport定义了控件中实际可见的部分,所有内容都在这个区域内显示。 滚动机…...
论文学习_Precise and Accurate Patch Presence Test for Binaries
摘要:打补丁是应对软件漏洞的主要手段,及时将补丁应用到所有受影响的软件上至关重要,然而这一点在实际中常常难以做到,研究背景。因此,准确检测安全补丁是否已被集成进软件发行版本的能力,对于防御者和攻击…...
ubuntu服务器版启动卡在start job is running for wait for...to be Configured
目录 前言 一、原因分析 二、解决方法 总结 前言 当 Ubuntu 服务器启动时,系统会显示类似 “start job is running for wait for Network to be Configured” 或 “start job is running for wait for Plymouth Boot Screen Service” 等提示信息,并且…...
国产数据库工具突围:SQLynx如何解决Navicat的三大痛点?深度体验报告
引言:Navicat的"中国困境" 当开发者面对达梦数据库的存储过程调试,或是在人大金仓中处理复杂查询时,Navicat突然变得力不从心——这不是个例。 真实痛点:某政务系统迁移至OceanBase后,开发团队发现Navicat无…...
牛客网NC21994:分钟计算
牛客网NC21994:分钟计算 📝 题目描述 输入格式 输入两行,每行包含两个整数,分别表示小时和分钟第一行表示起始时间,第二行表示结束时间 输出格式 输出一个整数,表示两个时间点之间的分钟数 示例 输入…...
全球宠物经济新周期下的亚马逊跨境采购策略革新——宠物用品赛道成本优化三维路径
在全球"孤独经济"与"银发经济"双轮驱动下,宠物用品市场正经历结构性增长。Euromonitor数据显示,2023年全球市场规模突破1520亿美元,其中中国供应链贡献度达38%,跨境电商出口增速连续三年超25%。在亚马逊流量红…...
Tomcat多应用部署与静态资源路径问题全解指南
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
128.在 Vue 3 中使用 OpenLayers 实现绘制矩形截图并保存地图区域
📌 本文将介绍如何在 Vue 3 中使用 OpenLayers 实现: 1)用户可在地图上绘制矩形; 2)自动截取该区域地图为图片; 3)一键保存为本地 PNG 图片。 ✨效果如下图所示 🧠一、前言 在地图类…...
使用 163 邮箱实现 Spring Boot 邮箱验证码登录
使用 163 邮箱实现 Spring Boot 邮箱验证码登录 本文将详细介绍如何使用网易 163 邮箱作为 SMTP 邮件服务器,实现 Spring Boot 项目中的邮件验证码发送功能,并解决常见配置报错问题。 一、为什么需要邮箱授权码? 出于安全考虑,大…...
python处理异常,JSON
异常处理 #异常处理 # 在连接MySQL数据库的过程中,如果不能有效地处理异常,则异常信息过于复杂,对用户不友好,暴露过多的敏感信息 # 所以,在真实的生产环境中, 程序必须有效地处理和控制异常,按…...