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

渗透测试之内核安全系列课程:Rootkit技术初探(三)

今天,我们来讲一下内核安全!

本文章仅提供学习,切勿将其用于不法手段!

目前,在渗透测试领域,主要分为了两个发展方向,分别为Web攻防领域和PWN(二进制安全)攻防领域。在PWN的二进制领域,免杀技术,一直是后渗透利用阶段的重要安全技术之一。

想要免杀,需要了解的安全技术知识包括软件加壳、代码混淆(例如,使用花指令)、隐匿技术(例如,Rootkit技术)、动态加密等内容。

接上一篇文章,我们来继续讲述下 Rootkit技术 的相关基础知识点内容

在《 渗透测试之内核安全系列课程:Rootkit技术初探 》之前的文章中,我们讲述了 GDT 全局描述符表、LDT 局部描述符表、GDTR 全局描述符表 寄存器、LDTR 局部描述符表 寄存器 、一致性代码、非一致性代码、实模式、保护模式、线性地址 等非常重要的基础知识点内容!

这些内容,是学习 Rootkit 技术 的基础 

今天,我们来重点讲解下 线性地址 到 物理地址 的 转换

注意,本章中的 比特位排序,是从 数字 1 开始计算的,第N位 对应的 比特位索引第N位 - 1

注意,本章中的 字节排序,是从 数字 1 开始计算的,第N个字节 对应的 字节索引第N个字节 - 1 

说起,线性地址 到 物理地址 的 转换,我们不得不提起几个非常重要的 控制寄存器 

CR0 寄存器、CR1 寄存器、CR2 寄存器CR3 寄存器 。 

其中,CR1 寄存器 ,并没有被实际使用,所以 暂时 忽略 ! 

这里,重点只讲 CR0 控制寄存器 、CR2 页故障线性地址寄存器、 CR3 页目录基址寄存器

CR0 控制寄存器,最重要的两个比特位,分别是第1位第32位,刚好是 CR0寄存器的内容值的“ 头 ” 和 “ 尾 ” !

CR0控制寄存器第1位 PE ,控制着 保护模式开启关闭 !当 PE 位1 时,保护模式 处于 开启状态 ,当 PE 位0 时,保护模式 处于 关闭状态,此时 计算机 运行于 实模式

CR0控制寄存器第32位 PG ,控制着 内存分页机制 的开启关闭 !当 PG 位1 时,内存分页机制 处于 开启状态 ,当 PG 位0 时,内存分页机制 处于 关闭状态,此时 计算机 运行于 实模式

如果需要 启用 内存分页机制,那么 第 1 位 PE 位 第 32 位 PG 位,均要为 1

在禁用 CPU 的 内存分页机制 时,线性内存地址 等同于 物理内存地址!

现在,让我们来科普一下 布尔值布尔运算 存在 的 意义

这主要是为了让您更加深刻理解01 所代表的 布尔运算 意义 !

在我之前发布的一些文章中,我提到了 布尔值 的 运算 !

非真即假,非假即真!不是真的?那么就一定是假的!不是假的?那么就一定是真的!

布尔值,只会存在 两个值,True 真,或者 False 假

在 计算机领域 的 二进制 世界 中,数字 1 ,通常代表 True 真

在 计算机领域 的 二进制 世界 中,数字 0 ,通常代表 False 假

在 计算机领域 的 二进制 世界 中,数字 1 ,通常代表 条件成立

在 计算机领域 的 二进制 世界 中,数字 0 ,通常代表 条件不成立

在 计算机领域 的 二进制 世界 中,数字 1 ,通常代表 开启

在 计算机领域 的 二进制 世界 中,数字 0 ,通常代表 关闭

这些知识,都属于 计算机领域 中 技术知识 学习方面 的 小技巧

CR2 页故障线性地址寄存器,主要用于 在页异常情况发生时,报告相应的出错信息

当发生页异常时(例如,指定的内存页,并不存在!这时,会触发 缺页中断 )CPU 会把引起 缺页中断线性地址 保存在 CR2 页故障线性地址寄存器 之中!

操作系统中的页异常处理程序(其实就是 缺页中断 所对应的  中断服务程序)可以通过检查 CR2 页故障线性地址寄存器 的 内容值 的方式,去筛查出 缺页中断 这个异常 是 由 虚拟地址空间线性地址空间)中的哪一个页面不存在而引起的(CR2 页故障线性地址寄存器,主要用于定位错误,以及通过分页交换文件去辅助载入内存分页)! 

我们需要知道,针对 缺页中断 ,从 硬盘 中 载入 对应的 页表资源页资源,是由 缺页中断 对应的  中断服务程序 去完成的 !CR2 页故障线性地址寄存器,在 硬盘空间  向 内存空间 载入  指定页表资源 或 指定页资源 时,起到了非常重要作用

CR3 页目录基址寄存器,主要用于 PDT 页目录表PDPT 页目录指针表 物理寻址

CR3 页目录基址寄存器,存储了 PDT 页目录表 或 PDPT 页目录指针表 物理内存地址

启用PAE 物理地址扩展的基础上,CR3 页目录基址寄存器 高 27 位,被用于 进行 PDPT 页目录指针表 物理地址寻址 !

上面提到了 CR3 寄存器,它主要用于存储 页目录内存空间 中的 物理地址 

我们需要知道,开启分页机制(例如,开启启动,在正式载入系统内核之前,此时,CPU工作于 实模式 之下 ),CPU 进行的 寻址操作 ,还是基于 物理内存地址 的 !只有在开启保护模式( 通过 CR0 寄存器第 1 个 比特位 PE位 的内容置为 1 来实现 )和 内存分页机制 ( 通过将 CR0 寄存器第 32 个 比特位 PG位 的内容置为 1 来实现 )之CPU 进行的 寻址操作 ,才会基于 线性内存地址 去进行 !在 开启 保护模式 和 内存分页机制 时,务必 将 CR3 寄存器 指向 页目录表  基址(页目录表在内存空间中的起始地址)(物理内存地址)

我们必须清晰地认知,虚拟地址空间 是被 操作系统 虚拟出来的!虚拟地址空间,只是 操作系统 进行 内存管理 的 一种技术实现方式虚拟地址空间物理地址空间 之间 存在 映射关系每一个进程,都拥有自己的虚拟地址空间!进程切换CR3 页目录基址 寄存器 中的内容,也会发生变化!这意味着,CR3 页目录基址寄存器 指向 新的物理内存地址!这代表着,虚拟地址空间,会随着进程切换行为,同时被切换掉进程切换,虚拟地址空间,也会同步切换!

为什么 CR3寄存器 承担着 切换虚拟地址空间义务呢?

CR3寄存器,是页目录基址寄存器,它存储了页目录空间在内存空间中的物理内存地址

CR3寄存器,是页目录基址寄存器,它指向了 内存空间 中的 页目录空间

CR3 寄存器,指定了页目录表 或 页目录指针表 内存空间中的物理地址!记住,是物理地址!是物理地址!是物理地址!重要的事情,要说三遍 !!!!

CR3 寄存器,就相当于 大树的根系它 存储着 页目录内存物理地址

CR3 寄存器 相关的 汇编指令使用的是 内存物理地址

CR3 寄存器,就像 树状 数据结构 中的 根节点

CPU分页机制 中,存在着 页目录、页表、页 这样的 技术设计概念

我们已经说过了,CR3 寄存器,存储着 页目录内存物理地址

页目录、页表、页 这样的 技术架构设计 ,共同实现了 内存分页机制树状 数据结构

页目录,相当于 大树的主干

页表,相当于 大树主干 上的 分叉

,相当于 大树主干 的 分叉上 生长的 叶子

透彻理解,树状 数据结构,是 理解 CPU 分页机制 技术实现 方面 的 重要基础! 

页目录中存在很多的子项,每个子项指向 页表内存空间 中的 物理地址

页表中存在很多的子项,每个子项指向 在 内存空间 中的 物理地址

CPU技术上实现 的 内存分页机制 ,除了 页目录、页表、页 这样的 技术架构设计 之外,线性地址 这种技术概念的出现,也是 实现 CPU 内存分页机制重要基础

线性地址、页目录、页表、页 等 技术架构设计 ,共同实现了 CPU 内存分页机制 !

线性地址、页目录、页表、页 等 技术架构设计 ,使 CPU 内存分页机制技术实现 成为了可能 !

线性地址,有 32 位 和 64 位 之分!

32位线性地址 ,用于 32位操作系统 下的 内存寻址 (最大寻址范围:4GB)!

64位线性地址 ,用于 64位操作系统 下的 内存寻址 (最大寻址范围:64GB)!

本篇文章中,重点还是在 32位 操作系统 环境下 进行相关内容讲解

32位 环境下,很多概念,都是向 4 对齐的 !

64位 环境下,很多概念,都是向 8 对齐的 !

无论是 32 位 的 操作系统环境,还是 64位 的 操作系统环境,都是以向 2 的整数倍 对齐的!

内存边界,一定会是 2 的 整数倍 !

在上面的内容中,我们简单的提到了 线性地址、页目录、页表、页 的 架构设计 !

现在,我们来重点讲一下 线性地址、页目录、页表、页 的方面的 技术实现

80386 以上规格的处理器环境中,32位操作系统环境下,内存分页 中的 页大小  4KB

80386 以上规格的处理器环境中,64位操作系统环境下,内存分页 中的 页大小 8KB

在内存空间中,bit 比特位 最基础内存空间存储单元

基础知识科普:8 BIT (比特位)= 1B(byte 字节);1024 B = 1 KB ;1024 KB = 1 MB ; 1024MB = 1 GB;1024GB = 1TB 。

32位环境下,以 Windows 系列 操作系统 举例 !

线性地址 从 0 开始,到 2 GB 结束范围内的内存空间,是 用户态进程内存使用空间

线性地址 从 2G 开始,到 4 GB 结束范围内的内存空间,是 内核态进程内存使用空间

Windows 系列 的 操作系统环境 中 ,地址内存分段模式,是 基于平坦模式 的 ! 

Linux 系列 的 操作系统环境 中 ,地址内存分段模式,是 基于平坦模式 的 ! 

平坦模式 下 ,操作系统 能够 访问 一个连续的、不分段的 地址空间 !所有的段(包括 代码段、数据段、栈段 等)被映射到同一个内存地址空间中所有的段的段基址 都是 0在32位环境下,段限长为 4GB,在64位环境下,段限长为64GB

记住了吗?Windows 和 Linux 的 内存分段模式,都是 基于平坦模式 的 !

32位 线性地址第 23~32位,是 页目录表项 中的 子项偏移量

32位 线性地址第 23~32位 的 内容值 ,加上 CR3寄存器 中的 页目录基地址(页目录在内存空间中的起始物理地址),即得到了 页目录表项物理内存地址

32位 线性地址第 13~22位 的 内容值 ,加上 页目录表项 中 存储的 子项偏移量,即得到了 内存分页物理内存地址

32位 线性地址第 1~12位 的 内容值 ,加上 内存分页 的 页基址内存页起始物理地址,即得到了 线性内存地址 对应的 物理内存地址

虚拟地址空间 ( 采用 线性地址 方式 进行 虚拟内存寻址 )物理地址空间 ( 采用 物理地址 方式 进行 物理内存寻址)之间,存在映射关系一个进程,就会拥有一个虚拟地址空间!但是!物理地址空间,只会存在一个!这是 N 对 1映射关系 !多个虚拟地址空间,通过进程切换(进程切换时,虚拟地址空间也会随之被切换!切换原理 :更改 CR3 寄存器 的 内容值!CR3 寄存器 存储了 指向 页目录表 的 物理地址 !物理地址被替换了,意味着 CR3寄存器 已经 指向了 不同的页目录表 !每个进程,都会拥有一个属于自己的页目录表!页目录表,是属于虚拟地址空间的!而每个进程,都会拥有一个虚拟地址空间!相应的,每个进程,都会存在一个页目录表),共享 同一个 物理地址空间

虚拟地址空间,是按 页 进行管理的!

物理地址空间,也是按 页 进行管理的!

虚拟地址空间 中的 页面大小 和 物理地址空间 中的 页面大小 相同!

在 Intel  系列的 芯片中,存在专门的电路,负责将虚拟地址(线性地址)转译为内存物理地址!

还记得 内存管理单元 (MMU)吗 (下面的内容,会有相应的介绍)?

虚拟地址空间,通过 树状 数据结构  对 虚拟地址空间 进行 创建 和 管理 !

虚拟地址空间 中,线性内存空间 连续的 !通过 树状 数据结构,的确可以实现 对于任意线性地址空间操作访问

首先,根据 32位 线性地址第 23~32位 的 内容值,结合 CR3寄存器 中的 页目录基地址 得到 页目录中对应子项(指定的页表)物理内存地址指定页表的内存空间基地址)!然后,根据 

32位 线性地址第 13~22位 的 内容值,结合 已获取的 指定页表的内存空间基地址  得到 页表中对应子项(指定的页) 的 物理内存地址指定页的内存空间基地址)!最后,根据 32位 线性地址第 1~12位 的 内容值,结合 已获取的 指定页的内存空间基地址  得到 线性地址 对应的 物理地址 

虚拟地址空间 中,有些 虚拟页面(内存页面),并不存在对应的 物理页面,我们管这种情况,叫做 “页面缺失” !当这种情况发生时,会触发 页面缺失 中断,由 页面缺失 中断 对应的 处理程序(这种处理程序,通常是一种 中断服务例程 !不了解 中断服务 的童鞋儿,可以去看一下 王爽 老师 写的 《零基础入门汇编语言》 这本书 ),去将以虚拟内存形式存储于硬盘中的页面数据,从硬盘空间中取回!或许,这就是 虚拟内存 这个技术实现价值和存在意义!我们可以把这种行为,称为 ” 数据交换 “ !

什么是 虚拟内存

我们需要知道,在 Windows 系列 的 操作系统环境 中, 虚拟内存 在技术实现本质上 就是 物理内存 + 分页文件

我们必须知道,分页文件,是被存储在 硬盘 上的

这里的 分页文件,指的就是 分页交换文件

在《Windows核心编程》一书的 第13个章节( 物理存储器和页交换文件 )内容中,重点讲解了 分页交换文件 和 物理存储器 之间 进行 数据交换的过程 这种非常重要的基础知识内容

在下一章内容中,我们将重点地去讲解 分页交换文件 和 物理存储器 之间  是 如何 进行 数据交换 的!下一章节中,我们将重点讲解 分页交换文件 和 物理存储器 之间 的 数据交换 过程 !

在不同操作系统环境中,对于 虚拟内存技术实现,会略有不同

在下一章内容中,我们会主要 参考 Windows 系列操作系统 进行相应的 内容讲解 

还记得下面的这句话吗?

在 Intel  系列的 芯片中,存在专门的电路,负责将虚拟地址(线性地址)转译为内存物理地址!

是的!说到 线性地址寻址我们不得不重点提一下,CPU 的 内存管理单元 (MMU)

CPU内存管理单元 (MMU)是什么东西呢 ?

内存管理单元 (MMU),的英文翻译为 “ Memory Management Unit ” !

内存管理单元 (MMU),也被称为 ” 分页内存管理单元 “,英文翻译为 ” paged memory management unit “,被简写为 ” PMMU “ !

内存管理单元 (MMU),是一种被用于处理 中央处理器( CPU )内存访问请求计算机硬件 

内存管理单元 (MMU)的功能,包括 虚拟地址(线性地址) 物理地址(内存物理地址)转换( 也就是,我们常说的,虚拟内存管理,或称为 虚拟地址空间 管理 !这里,涉及到了 虚拟地址空间 的相关概念 )!

内存管理单元 (MMU)的功能,包括 内存保护( 内存分页 的 执行保护,这里涉及到了 内存分页 的 访问权限 

内存管理单元 (MMU)的功能,包括 中央处理器高速缓存的控制( 这里主要指,对 CPU 中的 高速缓存部件 进行管控 )!

内存管理单元 (MMU)的功能,包括 在相对简单计算机体系结构,负责进行总线仲裁总线仲裁(bus arbitration)计算机 中多个 设备 或 模块 可能会同时去 申请 对于 总线 的 使用权 ,为 避免 产生总线 冲突 ,需由 总线仲裁机构 ,也就是 内存管理单元 MMU 去进行 合理控制  适当管理 那些 需要占用总线的申请者(计算机中的 设备 或  模块 等),当多个申请者同时提出总线使用请求时,需要一定的优先算法去决策哪个申请者能够优先获得对于总线使用权)!

内存管理单元 (MMU)的功能,包括 负责进行存储体切换( bank switching,在非常简单的计算机体系结构(例如,只有 8位 的 计算机设备)中 去执行 存储体切换 操作 !目前这块,笔者本人,也需要更加深入的理解,也许以后,会涉及到对这方面的更详细讲解 )。

大家一定要记住,内存管理单元 (MMU)这个硬件,是位于 中央处理器(CPU)之中的

CPU 的 内存管理单元 (MMU)用途价值,是什么呢 ?

 CPU 可以直接通过 MMU,去找出 实际要访问 的 指定内存空间物理内存地址

保护模式下,MMU 内存管理单元 实现 的是 虚拟地址(线性地址)物理内存地址转换过程 

大家需要记住,虚拟地址(线性地址)物理内存地址 的 转换,是由 MMU 内存管理单元 去自动完成的!

(未完待续)

请关注下一篇,渗透测试之内核安全系列课程:Rootkit技术初探(四)

相关文章:

渗透测试之内核安全系列课程:Rootkit技术初探(三)

今天,我们来讲一下内核安全! 本文章仅提供学习,切勿将其用于不法手段! 目前,在渗透测试领域,主要分为了两个发展方向,分别为Web攻防领域和PWN(二进制安全)攻防领域。在…...

大模型日报2024-06-08

大模型日报 2024-06-08 大模型资讯 AI研究:通过消除矩阵乘法实现高效的大语言模型 摘要: 该AI研究探讨了通过消除矩阵乘法来实现高效且可扩展的大语言模型(LLMs)。此方法旨在提升模型性能,提供更快速和高效的计算方案。 AWS大力投…...

leetcode 1631.最小体力消耗路径

思路:BFS二分 这道题和洛谷上的那个“汽车拉力赛”那道题很相似,但是这道题相较于洛谷那个来说会简单一些。 这里作者一开始写的时候思路堵在了怎么在BFS中用二分,先入为主的以为需要先写出来搜索函数然后再去处理二分的事,但是…...

【ARM64 常见汇编指令学习 19.2 -- ARM64 地址加载指令 ADR 详细介绍】

文章目录 地址加载指令 ADRADR 指令使用场景例子注意事项 地址加载指令 ADR ARMv8 架构引入了一系列的改进和扩展,包括对汇编指令集的更新。在这之中,ADR 指令是一个重要的组成部分,它用于计算并加载一个地址到寄存器。 ADR 指令 ADR 指令…...

vscode输出控制台中文显示乱码最有效解决办法

当VSCode的输出控制台中文显示乱码时,一个有效的解决办法是通过设置环境变量来确保编码的正确性。以下是解决方式: 首先,设置环境变量以修正乱码问题: 如果上述方法没有解决乱码问题,请继续以下步骤: 右键…...

springboot + Vue前后端项目(第十五记)

项目实战第十五记 写在前面1.后端接口实现1.1 用户表添加角色字段1.2 角色表增加唯一标识字段1.3 UserDTO1.4 UserServiceImpl1.5 MenuServiceImpl 2. 前端实现2.1 User.vue2.2 动态菜单设计2.2.1 Login.vue2.2.2 Aside.vue 2.3 动态路由设计2.3.1 菜单表新增字段page_path2.3.…...

如何在Windows 11中恢复丢失的快速访问菜单?这里提供解决办法

序言 在电脑的“快速访问”菜单中找不到固定的项目?或者,整个菜单对你来说已经消失了吗?无论哪种方式,你都可以强制你的电脑恢复菜单并显示其中的所有项目。以下是如何在你的Windows 11电脑上做到这一点。 将文件资源管理器设置为打开到主页 当你在文件资源管理器的左侧…...

变声器软件免费版有哪些?国内外12大热门变声器大盘点!(新)

变声软件是一种人工智能AI音频处理工具,允许用户实时修改自己的声音或改变预先录制的音频。这些软件解决方案可提供不同的效果,如改变声音的音调或速度,或将我们的声音转换成其他人或其他东西的声音,如名人、卡通人物、机器人或不…...

计算机网络 —— 数据链路层(无线局域网)

计算机网络 —— 数据链路层(无线局域网) 什么是无线局域网IEEE 802.11主要标准及其特点: 802.11的MAC帧样式 我们来看看无线局域网: 什么是无线局域网 无线局域网(Wireless Local Area Network,简称WLAN…...

SpringBoot图书管理系统【附:资料➕文档】

前言:我是源码分享交流Coding,专注JavaVue领域,专业提供程序设计开发、源码分享、 技术指导讲解、各类项目免费分享,定制和毕业设计服务! 免费获取方式--->>文章末尾处! 项目介绍048: 图…...

shell简介

一、Shell 概念定义 Shell 是用 C 语言编写的程序,是用户使用 Linux 的桥梁,既是命令语言又是程序设计语言。 shell 脚本为 Shell 编写的脚本程序,常说的 shell 通常指 shell 脚本。 包含一系列命令的文本文件,这些命令按照特定…...

使用 Scapy 库编写 ICMP 不可达攻击脚本

一、介绍 ICMP不可达攻击是一种利用ICMP(Internet Control Message Protocol)不可达消息来干扰或中断目标系统的网络通信的攻击类型。通过发送伪造的ICMP不可达消息,攻击者可以诱使目标系统认为某些网络路径或主机不可达,从而导致…...

Electron qt开发教程

模块安装打包 npm install -g electron-forge electron-forge init my-project --templatevue npm start //进入目录启动 //打包成一个目录到out目录下,注意这种打包一般用于调试,并不是用于分发 npm run package //打出真正的分发包,放在o…...

尝试用 GPT-4o 写 2024高考语文作文

文章目录 新课标I卷科技进步与问题的演变 新课标II卷抵达未知之境:探索与成长的旅程 全国甲卷坦诚交流:构建真正相遇的桥梁 北京卷历久弥新 天津卷定义与自定义:在世界的缤纷中前行 上海卷认可度的思考与反思 新课标I卷 阅读下面的材料&#…...

自动化Reddit图片收集:Python爬虫技巧

引言 Reddit,作为一个全球性的社交平台,拥有海量的用户生成内容,其中包括大量的图片资源。对于数据科学家、市场研究人员或任何需要大量图片资源的人来说,自动化地从Reddit收集图片是一个极具价值的技能。本文将详细介绍如何使用…...

自动驾驶人工智能

自动驾驶技术中使用的算法和滤波器 如何部署软件中的算法和滤波器,以增强传感器数据的可用性和应用性 自动驾驶人工智能 文章目录 一、介绍二、自动驾驶的算法2.1 感知算法2.2 本地化算法2.3 映射算法2.4 规划算法2.5 控制算法2.6 过滤 器2.7 卡尔曼滤波器2.8 颗粒过…...

基础乐理入门

基础概念 乐音:音高(频率)固定,振动规则的音。钢琴等乐器发出的是乐音,听起来悦耳、柔和。噪音:振动不规则,音高也不明显的音。风声、雨声、机器轰鸣声是噪音,大多数打击乐器&#…...

mysql 8 linux7,8安装教程

选择自己对应的linux版本 cat /etc/os-release //查看自己linux系统版本 1.mysql下载地址 MySQL :: Download MySQL Community Server (Archived Versions) 拉到下面找到 选择自己linux指定的版本,否则会很麻烦 cat /etc/os-release //查看系统版本 2.查…...

『矩阵论笔记』特征分解(eigendecomposition)通俗解释!

特征分解(eigendecomposition)通俗解释! 文章目录 一. 特征分解(eigendecomposition)通俗解释!1. 它是如何工作的2. 试图达到什么目的3. 为什么它有用(将一个方阵分解成这三个组成矩阵有什么好处呢?)二. 参考文献一. 特征分解(eigendecomposition)通俗解释! 大家好,欢迎回…...

顶级域名和二级域名的区别

互联网是一个由无数个网络节点组成的复杂系统,而域名则是这个系统中用于识别和定位这些节点的重要工具。在域名体系中,顶级域名(Top-Level Domain,TLD)和二级域名(Second-Level Domain,SLD)是两个基本的层级概念。本文将探讨这两者…...

深入解析Kafka消息丢失的原因与解决方案

深入解析Kafka消息丢失的原因与解决方案 Apache Kafka是一种高吞吐量、分布式的消息系统,广泛应用于实时数据流处理。然而,在某些情况下,Kafka可能会出现消息丢失的情况,这对于数据敏感的应用来说是不可接受的。本文将深入解析Ka…...

【Python列表解锁】:掌握序列精髓,驾驭动态数据集合

文章目录 🚀一、列表🌈二、常规操作💥增💥删💥改💥查 ⭐三、补充操作 🚀一、列表 列表是一个能够存储多个同一或不同元素的序列 列表:list ---- [] 列表属于序列类型(容器…...

安卓打造安装包(应用打包、规范处理安装包、安全加固)

本章介绍应用安装包的基本制作规范,主要包括:如何导出既美观又精简的APK文件、如何按照上线规范调整App的相关设置、如何对APK文件进行安全加固以防止安装包被破解。 应用打包 本节介绍APK安装包的打包过程,包括:如何利用Androi…...

ElasticSearch教程(详解版)

本篇博客将向各位详细介绍elasticsearch,也算是对我最近学完elasticsearch的一个总结,对于如何在Kibana中使用DSL指令,本篇文章不会进行介绍,这里只会介绍在java中如何进行使用,保证你看完之后就会在项目中进行上手&am…...

[office] excel做曲线图的方法步骤详解 #经验分享#知识分享#其他

excel做曲线图的方法步骤详解 Excel是当今社会最流行用的办公软件之一,Excel可以用于数据的整理、分析、对比。可以更直观的看到数据的变化情况,而有很多时候需要制作曲线图表进行数据比较,因此,下面是小编整理的如何用excel做曲线…...

Git+Gitlab 远程库测试学习

Git远程仓库 1、Git远程仓库 何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现 Gitee 码云是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快 码云 Gitee - 基于 Git 的代码托…...

Python可视化 | 使用matplotlib绘制面积图示例

面积图是数据可视化中的一个有效工具,用于说明时间上的关系和趋势。它们提供了一种全面的、视觉上迷人的方法,通过熟练地将折线图的可读性与填充区域的吸引力相结合来呈现数值数据。 在本文中,我们将学习更多关于在Python中创建面积折线图的…...

【环境搭建】2.阿里云ECS服务器 安装MySQL

在阿里云的 Alibaba Cloud Linux 3.2104 LTS 64位系统上安装 MySQL 8,可以按照以下步骤进行: 1.更新系统软件包: 首先,更新系统软件包以确保所有软件包都是最新的: sudo yum update -y2.下载 MySQL 8 官方 Yum 仓库…...

Python Flask 入门开发

Python基础学习: Pyhton 语法基础Python 变量Python控制流Python 函数与类Python Exception处理Python 文件操作Python 日期与时间Python Socket的使用Python 模块Python 魔法方法与属性 Flask基础学习: Python中如何选择Web开发框架?Pyth…...

PostgreSQL查看当前锁信息

PostgreSQL查看当前锁信息 基础信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg软件目录:/home/pg16/soft pg数据目录:/home/pg16/data 端口:5777查看当前锁信息的sql SELECT pg_s…...