当前位置: 首页 > article >正文

论文学习_Trex: Learning Execution Semantics from Micro-Traces for Binary Similarity

摘要:检测语义相似的函数在漏洞发现、恶意软件分析及取证等安全领域至关重要,但该任务面临实现差异大、跨架构、多编译优化及混淆等挑战。现有方法多依赖语法特征,难以捕捉函数的执行语义。对此,TREX 提出了一种基于迁移学习的框架,通过函数的微型执行轨迹学习执行语义,并迁移用于语义相似函数匹配。尽管微型轨迹本身精度有限,TREX 的关键在于利用其训练模型理解指令序列语义。该方法设计了无监督预训练任务,无需人工标注或特征工程,并引入分层Transformer架构以捕捉语义信息。在超过147万函数的跨架构、优化和混淆测试中,TREX 分别比先进方法提升7.8%、7.2%、14.3%,且运行速度提高8倍。消融实验验证了预训练的重要性,案例研究亦发现16个未公开的漏洞。代码与数据已开源:https://github.com/CUMLSec/trex。

引言

函数语义相似性指的是衡量两个函数在行为层面上的相似程度,这一能力在程序分析中具有基础性地位,并在实际安全领域中发挥着广泛作用,包括漏洞检测、漏洞利用生成、恶意软件谱系分析和数字取证等。例如,OWASP 在 2020 年的十大应用安全风险中就将“使用存在已知漏洞的组件”列为主要威胁之一。因此,在大规模软件项目中自动识别语义相似的易受攻击函数,能够显著减少人工审计的工作量。研究背景

在面向安全关键应用(如漏洞发现)进行语义相似函数匹配时,研究对象往往是二进制级别的软件,例如商用固件或遗留程序。但这一任务本身存在诸多困难:(1)函数在编译过程中会丢失高级语义信息,如数据结构定义等,使得分析难度大幅上升。(2)更为复杂的是,函数可能被编译用于不同的指令集架构,并经过多种编译优化或轻量级混淆处理,这进一步加剧了语义相似性识别的挑战。语义相似函数任务的挑战

近年来,基于机器学习的方法在应对上述挑战方面展现出巨大潜力。通过从函数二进制中学习稳健的特征,这类方法能够在不同体系结构、编译优化等级,甚至某些混淆情况下识别出语义相似的函数。其核心思路是让模型从函数中学习表示向量(即嵌入表示),然后通过两个函数嵌入之间的距离来衡量它们的相似度——距离越小,表示函数越相似。相比于依赖手工特征(如基本块数量)的传统签名方法,这类基于嵌入距离的策略已在多个研究中取得领先效果,表现优于早期技术。更重要的是,该策略在大规模函数匹配任务中极具优势,查找百万级函数仅需约0.1秒,效率极高。基于机器学习的语义相似函数检测


尽管已有方法取得了显著进展,但在处理语法和结构差异较大的语义相似函数时,匹配准确性仍面临挑战。其根本原因在于,代码的语义本质上是由其运行时行为决定的。然而,现有所有基于学习的方法都未考虑程序的执行语义,它们仅基于静态代码进行训练。这种训练方式容易使模型依赖于表层模式进行匹配,一旦这些模式发生变化或不存在,模型的准确性便会显著下降。核心思想,代码的语义本质上是由其运行时行为决定的

例如,考虑这样一对 x86 指令序列:mov eax, 2; lea ecx, [eax+4]mov eax, 2; lea ecx, [eax+eax*2],它们在语义上是等价的。但若一个机器学习模型仅关注语法特征,可能会因为两者共享如 moveaxleaecx 等相同子串,而错误地认为这是它们相似的主要依据。实际上,这种模式并未真正体现两者在语义上的等价关系。若模型无法理解大致的执行语义,就很容易依赖这些表面模式进行匹配,而忽略了本质原因:当 eax 为 2 时,[eax+eax*2][eax+4] 实际上计算的是相同的内存地址。现存问题,现有技术无法捕获代码运行时特征

现有的动态方法试图通过直接比较函数的运行时行为来规避静态分析中的局限性,以判断其语义相似性。然而,由于精准构造能够触达目标函数的输入是一项极具挑战且耗时的任务,相关研究通常采用“弱约束动态执行”的方式,即随机初始化函数的输入状态(如寄存器、内存)并直接执行目标函数。尽管这种方式避免了输入生成的复杂性,但若直接利用其生成的执行轨迹来判定函数相似性,往往会导致大量误报。例如,当两个本质不同的函数都对输入有严格检查时,随机输入可能频繁触发类似的浅层异常处理逻辑,从而使它们在行为上看起来“伪相似”。解释为什么不通过动态的方式实现运行时特征捕获

现有的静态方法和动态方法均存在问题


本文提出了一种名为 TREX(TRansfer-learning EXecution semantics)的方法,通过弱约束动态轨迹训练机器学习模型,从中学习指令在上下文中的近似执行语义。与以往直接利用这些轨迹进行相似性判断的方法不同,TREX 首先在多样化的轨迹数据上进行预训练,使模型掌握每条指令在特定上下文中的行为效果;随后再将预训练中获得的知识迁移用于语义相似函数的匹配任务。大量实验证明,这种对执行语义的近似学习在预训练阶段显著提升了语义相似函数匹配的准确性,尤其在跨体系结构、编译优化和混淆环境下,TREX 表现尤为突出。

核心观点在于,尽管弱约束动态执行轨迹中可能包含大量不可达的程序状态,但其中的许多指令仍然能够准确反映其真实的执行效果。因此,可以通过大量来自不同函数的轨迹数据,让机器学习模型观察并学习这些指令在实际上下文中的行为。一旦模型掌握了各类指令的大致执行语义,便能利用这些已学习的知识,进一步训练模型以实现语义相似函数的匹配。这样,在实际推理阶段,无需动态执行待匹配的函数,大幅降低了运行时开销。更重要的是,训练完成的模型在进行函数匹配时并不依赖动态轨迹本身,而是直接使用函数指令作为输入,但这些指令已通过预训练被赋予了丰富的语义信息。

在这项工作中,研究者将“微执行”(micro-execution)技术加以拓展,作为一种弱约束动态执行形式,用于在多种指令集架构下生成函数的“微轨迹”。所谓微轨迹,是由一系列对齐的指令及其对应的程序状态值构成的序列。模型的预训练则基于大量从不同函数中采集的微轨迹数据,采用掩码语言建模(masked LM)任务进行。该任务会随机遮盖序列中的部分信息,并要求模型根据上下文预测被遮盖的内容,从而迫使模型在推理缺失值的过程中学习函数的近似执行过程,无需依赖任何人工特征设计即可自动提取执行语义。此外,masked LM 是一种完全自监督的训练方式,因此 TREX 可以灵活地利用任意来源的函数数据持续进行训练与优化。

为实现这一目标,TREX 采用了一种分层式 Transformer 架构,专门用于学习函数的近似执行语义。不同于以往方法通常将数值信息视作无实际意义的占位符以规避庞大的词汇表规模,这一架构则显式建模微轨迹中的数值内容,从而更有效地捕捉那些可能蕴含关键语义的数值之间的依赖关系。此外,其自注意力机制经过特别设计,能够高效建模序列中的长距离依赖,使得 TREX 能够处理约 170 倍于现有模型长度的序列,并实现约 8 倍的运行加速,这对于从长执行轨迹中学习函数嵌入表示至关重要。

内容概述

挑战性案例:使用三个语义上等价但语法上不同的函数对证明仅从静态代码学习的一些挑战。

  • 跨架构匹配:它们都取某个寄存器的低12位,并将其与0x80进行比较。要识别这种语义相似性,不仅需要理解 x86 架构中的 and 指令与 ARM 架构中的 lsl/lsr 指令的大致执行语义,还需要掌握代码中具体数值(如 0xfff 和 0x14)在指令中的操作方式。然而,现有的机器学习方法大多仅基于静态代码进行训练,无法观测每条指令的实际运行效果。更进一步,由于完整引入所有可能的内存地址会导致词汇表规模过大,这些方法通常会将寄存器值和内存地址统一替换为抽象符号,结果无法利用关键的字节数值来判断底层的语义相似性。
  • 跨优化匹配[ebp+8][esp+4] 实际上访问的是同一内存地址——即调用者压入栈中的第一个函数参数。要识别这种相似性,模型需理解 push 指令会将栈指针 esp 向下移动4个字节;同时也要意识到第2行的 mov 指令将此时减少后的 esp 赋值给了 ebp,从而使得上方函数中的 ebp+8 与下方函数中的 esp+4 等价。然而,这类动态行为在静态代码中是无法直接体现的。
  • 简单混淆匹配:其本质是将 eax+1 替换为 eax-(-1)。要识别这种语义等价性,模型必须能够大致理解诸如 xorsubadd 等算术操作的执行行为。然而,静态代码本身并不足以揭示这些底层算术语义的等价关系。

微轨迹上训练语言模型:本节主要阐述了为何在函数的微轨迹上执行掩码语言建模(masked LM)预训练任务,能够有效促使模型学习其执行语义。尽管目前仍难以从理论上明确证明此类语言建模任务具体学习到了哪些类型的知识,但重点在于理解其背后的直觉逻辑:通过预测微轨迹中被遮盖的代码和数值,模型被迫去推理缺失信息在当前上下文中的合理性,这一过程正是促使模型掌握指令执行语义的关键

Masked LM:针对函数的微轨迹(包含指令和对应的值),随机遮盖其中部分内容,并训练模型根据未被遮盖的信息预测被遮盖的部分。由于这一过程仅依赖输入数据本身进行预测,完全不需要额外的人工标注,因此 TREX 可以利用大量自然获取的函数数据进行训练与持续优化。这种方式的优势在于,即使某条指令未在某个函数的微执行中出现,它很可能会出现在其他函数的微轨迹中,从而帮助 TREX 逐步掌握更广泛指令的执行语义,实现对多样化指令行为的近似建模。

Masking register:以图2c中的函数为例,这两个函数本质上都将栈中位置 [rbp-0x2c] 的值加一。上方函数采用了直接方式:将该值加载到 eax,加1后再写回栈中;而下方函数则使用了更曲折的方法,先将 -1 存入 ecx,然后通过 eax 减去 ecx 来实现加1的效果,最终同样将结果写回栈。研究人员在上方函数的第3行对 eax 进行了掩码处理,结果发现预训练模型能够准确预测出该寄存器的名称和动态值。这说明模型不仅理解了 add 指令的语义,还能根据第2行的 eax 值推断出加法后的结果。同样地,模型也能恢复下方函数第4行的 ecx 和第5行的 eax 值,表明其掌握了 xorsub 指令的执行效果。正是这种对底层语义的理解,在后续用于函数匹配的微调阶段,大幅增强了模型的鲁棒性,使其更倾向于依据执行行为而非表层语法特征来判断函数相似性。

Masking opcode:除了对寄存器及其值进行掩码外,还可以对指令的操作码(opcode)进行掩码处理。要正确预测被遮盖的操作码,模型必须理解各类操作码的执行效果。以图2b为例,在上方函数第2行将 mov 操作码遮盖后,预训练模型最终以最高概率预测出 mov,而非其他可能的候选指令如 addinc 等。要实现这一正确预测,模型需掌握函数语义中的多个关键点:首先,从上下文信息来看,比如第3行中 ebp 的值和第2行中 esp 的状态,模型能推断出 mov 最符合语义,因为它完成了将 esp 的值赋给 ebp 的操作;而其他指令则因其执行效果与后续寄存器状态不符而被排除。这表明模型已近似掌握了 mov 的执行语义。其次,模型也学习了 x86 指令的一般语法规则和调用约定,例如只有部分操作码支持两个操作数(如 ebp, esp),这使得模型能自动排除像 pushjmp 这类语法不合法的候选项。因此,模型能够进一步推断出上方函数第3行中的 ebpesp 值相等,同时还可能从其他训练样本中学到 push 会使栈指针 esp 减少4字节。正因如此,在经过微调用于函数匹配时,模型更有可能根据 [ebp+8][esp+4] 实际访问的是相同地址这一语义等价性进行判断,而不是依赖两段代码在语法上的相似性。

Other masking strategies:需要注意的是,在掩码操作中,并不受限于指令中被遮盖元素的数量或类型——既可以对寄存器、操作码等单个元素进行遮盖,也可以遮盖整条指令,甚至是连续的一段指令序列,还可以随机遮盖某些指令的输入输出值。更进一步,模型在每轮训练以及不同样本之间,都会动态选择不同的代码块和程序状态子集进行掩码操作。这样的设计使模型能够学习到多样化、复合型的指令序列执行效果,这对于识别使用不同指令实现的语义相似函数至关重要。在本研究中,采用的是一种完全随机的掩码策略,以固定比例在微轨迹中选取掩码位置(具体细节见第IV-C节)。不过,这也为后续研究提供了一个有趣方向,即探索如何以更高效但仍廉价的方式,动态优化掩码位置与比例,从而进一步提升模型效果。

研究内容

微轨迹语义:研究团队基于 Godefroid 提出的微执行方法进行了扩展,使其不仅支持原论文所描述的 x86,还适用于 x64、ARM 和 MIPS 架构。接下来的内容简要说明了如何对单个函数二进制进行微执行,并重点介绍了处理不同类型指令时所采用的关键算法。为了统一不同架构汇编语法的差异,文中引入了一种低层次的中间表示(IR)语言,用于建模函数的汇编代码,如下图所示。需要强调的是,这种 IR 仅用于阐述微轨迹生成过程的核心机制;在实际实现中,使用的是真实的汇编指令,并经过分词处理后作为模型输入。中间表示值得学习

微轨迹算法:首先,它会初始化内存以加载目标函数 f 的代码及其对应的栈空间,随后初始化除特殊用途寄存器(如栈指针、程序计数器)以外的所有通用寄存器。接下来,系统以线性方式依次执行函数中的指令;若执行过程中指令涉及内存读写操作,则按需映射相应内存地址;对于读取操作,还会在目标地址中初始化一个随机值。遇到调用或跳转指令时,系统会检查其目标地址,跳过无效的调用或跳转,这种处理方式被称为“强制执行”。通过绕过无法抵达的跳转路径或调用指令,系统能够持续执行函数至末尾,从而暴露更多潜在行为,例如规避由输入检查引发的异常。至于 nop 指令,由于其常用于函数内的填充操作,处理时则直接跳过。当函数所有指令执行完毕、遇到 ret 指令,或达到超时时间时,微执行过程即告终止。图13和图14展示了两个真实函数的微轨迹示例。

相关文章:

论文学习_Trex: Learning Execution Semantics from Micro-Traces for Binary Similarity

摘要:检测语义相似的函数在漏洞发现、恶意软件分析及取证等安全领域至关重要,但该任务面临实现差异大、跨架构、多编译优化及混淆等挑战。现有方法多依赖语法特征,难以捕捉函数的执行语义。对此,TREX 提出了一种基于迁移学习的框架…...

在VirtualBox中安装虚拟机后不能全屏显示的问题及解决办法

在VirtualBox中安装Windows或Linux虚拟机后,将遇到启动虚拟机后,只能在屏幕中的一块区域里显示虚拟机桌面,却不能全屏显示的问题。要解决此问题,需要在虚拟机中安装与VirtualBox版本相对应的VBox GuestAdditons软件。 这里…...

《大规模电动汽车充换电设施可调能力聚合评估与预测》MATLAB实现计划

模型概述 根据论文,我将复刻实现结合长短期记忆网络(LSTM)和条件变分自编码器(CVAE)的预测方法,用于电动汽车充换电设施可调能力的聚合评估与预测。 实现步骤 1. 数据预处理 导入充电数据 (Charging_Data.csv)导入天气数据 (Weather_Data.csv)导入电…...

CSS flex:1

在 CSS 中,flex: 1 是一个用于弹性布局(Flexbox)的简写属性,主要用于控制 flex 项目(子元素)如何分配父容器的剩余空间。以下是其核心作用和用法: 核心作用 等分剩余空间:让 flex …...

Python 字典键 “三变一” 之谜

开头:读者的“玄学”字典谜题 上周,朋友发来了一段让他抓耳挠腮的代码: >>> {True: foo, 1: bar, 1.0: baz} {True: baz} “我明明定义了布尔True、整数1、浮点数1.0三个键,结果字典里只剩True一个键,值…...

Spring Boot中HTTP连接池的配置与优化实践

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、HTTP连接池的核心价值 在微服务架构和分布式系统场景中,HTTP客户端频繁创建/断开连接会产生显著的性能损耗。通过连接池技术可以实现&#x…...

初识XML

初识XML <?xml version"1.0" encoding"utf-8" ?> <!--根标签只能有一个--> <!--第一行永远都是 <?xml version"1.0" encoding"utf-8" ?> 前面不允许出现任何其他东西&#xff0c;空格换行等均不行 --> &…...

element-ui分页的使用及修改样式

1.安装 npm install element-ui -S 2.在main.js中引入,这里是全部引入&#xff0c;也可以按需引入 import ElementUI from element-ui import element-ui/lib/theme-chalk/index.css Vue.use(ElementUI) 3.使用 layout"prev, pager, next, jumper" &#xff1a;jumpe…...

2025年第十六届蓝桥杯软件赛省赛C/C++大学A组个人解题

文章目录 题目A题目C&#xff1a;抽奖题目D&#xff1a;红黑树题目E&#xff1a;黑客题目F&#xff1a;好串的数目 https://www.dotcpp.com/oj/train/1166/ 题目A 找到第2025个素数 #include <iostream> #include <vector> using namespace std; vector<i…...

物理:人的记忆是由基本粒子构成的吗?

问题: 基因属于人体的一部分,记忆也是人体的一部分,那么为什么基因可以代际遗传,但是记忆却被清空重置。如果基因是由粒子构成,那么记忆是不是也应该由粒子构成?如果记忆是粒子构成的,那么能否说明记忆永恒,即使死亡了身体被分解了,那么只要保证其身体有关的所有粒子被…...

Memcached 的特性和使用场景介绍,以及集群搭建

以下是 Memcached 的特性和使用场景介绍,以及集群搭建的详细示例: 特性 高性能 内存存储:数据存储在内存中,读写速度极快。简单协议:使用基于文本的简单协议,通信高效。分布式架构 一致性哈希:采用一致性哈希算法,将数据均匀分布到多个节点,支持动态增减节点,减少数…...

uni-app,小程序中的addPhoneContact,保存联系人到手机通讯录

文章目录 方法详解简介 基本语法参数说明基础用法使用示例平台差异说明注意事项最佳实践 方法详解 简介 addPhoneContact是uni-app框架提供的一个实用API&#xff0c;用于向系统通讯录添加联系人信息。这个方法在需要将应用内的联系人信息快速保存到用户设备通讯录的场景下非…...

从数据中台到数据飞轮:数字化转型的演进之路

从数据中台到数据飞轮&#xff1a;数字化转型的演进之路 数据中台 数据中台是企业为整合内部和外部数据资源而构建的中介层&#xff0c;实现数据的统一管理、共享和高效利用&#xff0c;目标是打破信息孤岛&#xff0c;提高数据使用效率&#xff0c;支持业务决策和创新 实施成本…...

Spring Boot 注解详细解析:解锁高效开发的密钥

一、引言 Spring Boot 以其快速开发、自动配置等特性&#xff0c;成为构建 Java 应用程序的热门框架。而注解在 Spring Boot 中扮演着至关重要的角色&#xff0c;它们如同魔法指令&#xff0c;简化了配置流程&#xff0c;增强了代码的可读性与可维护性。本文将深入剖析 Spring…...

2025年5月-信息系统项目管理师高级-软考高项一般计算题

决策树和期望货币值 加权算法 自制和外购分析 沟通渠道 三点估算PERT 当其他条件一样时&#xff0c;npv越大越好...

zst-2001 上午题-历年真题 算法(5个内容)

回溯 算法 - 第1题 找合适的位置&#xff0c;如果没有位置就按B回家 d 分治 算法 - 第2题 b 算法 - 第3题 a 算法 - 第4题 划分一般就是分治 a 算法 - 第5题 分治 a 0-1背包 算法 - 第6题 c 算法 - 第7题 最小的为c 3100 c 算法 - 第8题 …...

【愚公系列】《Manus极简入门》036-物联网系统架构师:“万物互联师”

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…...

3d关键点 可视化

目录 pygame pygame保存mp4 mayavi pygame import pygame from pygame.locals import * import numpy as np import sys# 初始化Pygame pygame.init() width, height 800, 600 screen pygame.display.set_mode((width, height)) clock pygame.time.Clock()# 生成示例数据…...

udp多点通信和心跳包

刷题 # UDP多点通信核心要点## 基础通信模式### 单播通信- 一对一通信方式- UDP默认通信模式- 地址指向具体目标主机### 广播通信- 一对多通信机制- 地址范围&#xff1a;xxx.xxx.xxx.255- 仅限局域网传输- 需设置SO_BROADCAST标志### 组播通信- 多对多群组通信- 地址范围&…...

什么是序列化与反序列化

序列化与反序列化&#xff1a;概念、作用及应用 一、基本定义 序列化&#xff08;Serialization&#xff09; 将 ** 对象的状态&#xff08;数据、属性等&#xff09;转换为可存储或传输的字节流&#xff08;二进制或文本格式&#xff09;** 的过程。 目的&#xff1a;使对象能…...

音视频学习:使用NDK编译FFmpeg动态库

1. 环境 1.1 基础配置 NDK 22b (r22b)FFmpeg 4.4Ubuntu 22.04 1.2 下载ffmpeg 官网提供了 .tar.xz 包&#xff0c;可以直接下载解压&#xff1a; wget https://ffmpeg.org/releases/ffmpeg-4.4.tar.xz tar -xvf ffmpeg-4.4.tar.xz cd ffmpeg-4.41.3 安装基础工具链 sudo …...

如何使用 Qwen3 实现 Agentic RAG?

今天&#xff0c;我们将学习如何部署由阿里巴巴最新Qwen 3驱动的Agentic RAG。 这里是我们的工具栈&#xff1a; CrewAI用于代理编排。 Firecrawl用于网络搜索。 LightningAI的LitServe用于部署。 顶部的视频展示了这一过程。 图表显示了我们的Agentic RAG流程&#xff1…...

相机、雷达标定工具,以及雷达自动标定的思路

本篇我们来看一下自动驾驶传感器配置一个非常重要的模块&#xff0c;也就是传感器的标定。这里主要是对我之前修改的功能包的使用进行一个介绍. 对应的资源也已经上传了&#xff0c;0积分下载 安装 首先整个项目是使用ros1来进行启动的,但是要想正常编译,需要先安装三个对应的…...

vsomeip环境搭建保姆级教程

vsomeip环境搭建保姆级教程 ubuntu环境搭建 {% links %} site: VMware搭建ubuntu保姆级教程 url: https://zhuanlan.zhihu.com/p/1903219373906327339 desc: flechazo image: https://q1.qlogo.cn/g?b=qq&nk=2861099&s=5 color: “#9d5b8b” {% endlinks %} vsomei…...

【工具记录分享】提取bilibili视频字幕

F12大法 教程很多 但方法比较统一 例快速提取视频字幕&#xff01;适用B站、AI字幕等等。好用 - 哔哩哔哩 无脑小工具 哔哩哔哩B站字幕下载_在线字幕解析-飞鱼视频下载助手 把链接扔进去就会自动生成srt文件 需要txt可以配合&#xff1a; SRT转为TXT...

我的MCP相关配置记录

1.VSCode的Cline中的MCP {"mcpServers": {"github.com/modelcontextprotocol/servers/tree/main/src/github": {"autoApprove": [],"disabled": false,"timeout": 60,"command": "cmd","args&quo…...

systemd vs crontab:Linux 自动化运行系统的全面对比

在 Linux 系统运维和开发中&#xff0c;任务调度与服务管理 是不可或缺的一环。无论是定期备份、日志轮转&#xff0c;还是启动后台服务&#xff0c;自动化机制都能极大地提高系统的可靠性与效率。两种最常用的自动化工具是&#xff1a; crontab&#xff1a;传统的基于时间的任…...

我们来学nacos -- 集群nacos2.5.1mysql8.4

2.5.1集群搭建 架构下载解压到3个文件夹初始化数据库&数据迁移检查端口可用配置cluster.confapplication.properties 使用mysql8.4的jar启动db.num is null报错datasource错误成功 nginx反向代理集群查看 架构 其中包含3个nacos节点&#xff0c;然后一个负载均衡器代理3个…...

计算机网络核心技术解析:从基础架构到应用实践

计算机网络作为现代信息社会的基石&#xff0c;承载着全球数据交换与资源共享的核心功能。本文将从网络基础架构、核心协议、分层模型到实际应用场景&#xff0c;全面解析计算机网络的核心技术&#xff0c;并结合行业最新趋势&#xff0c;为读者构建系统的知识体系。 一、计算机…...

Spring Boot 基于 Cookie 实现单点登录:原理、实践与优化详解

前言 在多系统交互的应用场景中&#xff0c;单点登录&#xff08;SSO&#xff09;能够显著提升用户体验&#xff0c;减少重复登录的繁琐操作。基于 Cookie 的单点登录方案&#xff0c;凭借其简单直观、浏览器原生支持的特性&#xff0c;成为快速实现单点登录的有效方式。本文将…...