《逆向工程核心原理》第三~五章知识整理
查看上一章节内容《逆向工程核心原理》第一~二章知识整理
对应《逆向工程核心原理》第三章到第五章内容
小端序标记法
- 字节序
-
- 多字节数据在计算机内存中存放的字节顺序
- 分为小端序和大端序两大类
- 大端序与小端序
BYTE b = 0x12;
WORD w = 0x1234;
DWORD dw = 0x12345678;
char str[] = "abcde";
TYPE | Name | 字节 | 大端序 | 小段序 |
BYTE | b | 1 | [12] | [12] |
WORD | w | 2 | [12][34] | [12][34] |
DWORD | dw | 4 | [12][34][56][78] | [78][56][34][12] |
char[] | str | 6 | [61][62][63][64][65][00] | [61][62][63][64][65][00] |
- 1 字节,在二进制是 8 位,在十六进制是 2 位
- 内存地址:从低到高增长(如
0x1000
→0x1001
→0x1002
)。 - 数据的高/低位:数值的权重高低。例如,
0x12345678
中:
-
- 高位字节是
0x12
(权重最大,像数字的“千位”), - 低位字节是
0x78
(权重最小,像数字的“个位”)
- 高位字节是
- 大端序:内存的低地址存储数据的高位字节
-
- 人类视角:从左到右(地址递增)阅读,数值顺序不变,符合直觉。
- 网络传输(网络字节序)、某些文件格式(如JPEG)
- 保存多字节数据很直观
- 小端序:低位字节在低地址,高位字节在高地址
-
- 硬件视角:低地址存低位字节,方便逐字节处理(如加法从低位开始)
- x86/x64架构CPU,内存中直接处理低位数据更高效
- 字符串:最后是以 NUll 结尾,a 的 ASCII 码十六进制是 0x61
-
- 字符串被保存在一个字符数组中,字符数组在内存中是连续的,无论采用大端序还是小端序,存储顺序都相同
在 OllyDbg 中查看 LittleEndian.exe 文件
#include "windows.h"
BYTE b = 0x12;
WORD w = 0x1234;
DWORD dw = 0x12345678;
char str[] = "abcde";int main(int argc, char *argv[])
{byte lb = b;WORD lw = w;DWORD ldw = dw;char *lstr = str;return 0;
}
直接给出 main() 函数的地址,按 Ctrl+G 跳转到 401000 地址处
可以看到我们的定义的变量 0x12 地址应该是 40AC40
可以发现,这些数据使用小端序存储
IA-32 寄存器
寄存器
- 寄存器是 CPU 内部用来存储数据的一些小型存储区域,有非常高的读写速度
- 与 RAM(随机存储器、内存)略有不同,CPU 访问 RAM 中的数据时要经过较长的物理路径,花费时间长
学习程序调试技术,需要学习调试器解析出的汇编指令
IA-32 提供了庞大的汇编指令,指令可以翻看 Intel 提供的用户手册了解,大部分汇编指令用于操作寄存器或检查其中的数据
IA-32 寄存器
IA-32 是英特尔推出的 32 位元架构,属于复杂的指令集架构,支持多种寄存器
基本程序运行寄存器是 IA-32 寄存器的一种
基本程序运行寄存器
E 表示扩展,表示该寄存器在 16 位 CPU(IA-16)时已存在,并且其大小在 IA-32 下由原 16 位扩展为 32 位
通用寄存器
- 4 字节 32 位,保存常量与地址
- 传送和暂存数据,参与算术逻辑运算,保存运算结果
- 各寄存器
-
- EAX:累加器(针对操作数和结果数据)
-
-
- 用在函数返回值中,所有 Win32 API 函数都会先把返回值保存到 EAX 再返回
-
-
- EBX:基址寄存器(DS 段中的数据指针)
- ECX:计数器(字符串和循环操作)
-
-
- 也可以用在循环命令(LOOP)中循环计数,每执行一次循环,ECX 减 1
-
-
- EDX:数据寄存器(I/O 指针)
以上 4 个寄存器主要用在算法运算(ADD、SUB、XOR、OR)指令中,常用来保存常量与变量的值
某些汇编指令(MUL、DIV、LODS)直接操作特定寄存器,执行这些命令,仅改变特定寄存器的值
-
- EBP:扩展基址指针寄存器(SS 段中栈内数据指针)
-
-
- 表示栈区域的基地址,函数被调用时保存 ESP 的值,函数返回时再把值返回 ESP,保证栈不会崩溃(即栈帧技术)
-
-
- ESI:源变址寄存器(字符串操作源指针)
- EDI:目的变址寄存器(字符串操作目标指针)
- ESP:栈指针寄存器(SS 段中栈指针)
-
-
- 指示栈区域的栈顶地址,某些指令(PUSH、POP、CALL、PET)可以直接用来操作 ESP
-
后四个寄存器主要用作保存内存地址的指针
- 对低 16 位兼容
-
- EAX:(0~31)32 位
- AX:(0~15)EAX 的低 16 位
- AH:(8~15)AX 的高 8 位
- AL:(0~7)AX 的低 8 位
段寄存器
- 段是一种内存保护技术。它把内存划分为多个区段,并为每个区段赋予起始地址。范围、访问权限等,以保护内存,
- 此外段还同分页技术一起用于将虚拟内存变更为实际物理内存。
- 段内存记录在 SDT(段描述符表)中,而段寄存器就持有这些 SDT 的索引
- 段寄存器由 6 中寄存器组成,每个寄存器大小为 2 字节 16 位,存放相应所在段的段基址
-
- CS:代码段寄存器
- SS:栈段寄存器
- DS:数据段寄存器
- ES:附加(数据)段寄存器
- FS:数据段寄存器
-
-
- 用于计算 SEH(结构化异常处理机制)、TEB(线程环境块)、PEB(进程环境块)等地址
-
-
- GS:数据段寄存器
- 每个段寄存器指向的段描述符与虚拟内存结合,形成一个线性地址,借助分页技术,线性地址最终被转换为实际的物理地址
-
- 不使用分页技术的操作系统中,线性地址直接变为物理地址
程序状态与控制寄存器
- EFLAGS:标志寄存器
-
- 大小为 4 字节 32 位,由原来 16 为 FLAGS 寄存器扩展而来
- 每位的值为 1 或 0
- ZF:零标志,若运算结果为 0,则值为 1,否则为 0
- OF:溢出标志,有符号整数溢出时,OF 值被设置为 1。MSB(最高有效位)改变时,其值也被设为 1
- CF:进位标志,无符号整数溢出时,其值也被设置为 1
指令指针寄存器
- EIP:指令指针寄存器
-
- 指令指针寄存器保存着 CPU 要执行的指令地址,其大小为 4 字节 32 位,由原 16 位 IP 寄存器扩展而来。
- 程序执行时,CPU 会读取 EIP 中一条指令的地址,传送指令到指令缓冲区后,EIP 寄存器的值自动增加,增加的大小即是读取指令的字节大小
- 这样,CPU 每次执行完一条指令,就会通过 EIP 寄存器读取并执行下一条指令
- 与通用寄存器不同,不能直接修改 EIP 的值,只能通过其他指令间接修改,比如 JMP,Jcc,CALL,RET,还可以通过中断或异常修改 EIP 的值
栈
栈内存在进程中的作用如下:
- 暂时保存函数内的局部变量
- 调用函数时传递参数
- 保存函数返回后的地址
栈是一种数据结构,按照 FILO(后进先出)的原则存储数据
栈的特征
一个进程中,栈顶指针(ESP)初始状态指向栈底端。
执行 PUSH 命令将数据压入栈时,栈顶指针就会上移到栈顶端。
执行 POP 命令从栈中弹出数据时,若栈为空,则栈顶指针重新移动到栈底端
栈是一种由高地址向低地址扩展的数据结构,栈是由下往上扩展的,逆向扩展
栈操作示例
打开 Stack.exe(调试过程中,寄存器的初始值与栈的初址会随运行环境的不同而不同)
可以看到栈顶指针的值为 19FF74,观察右下角的栈窗口,可以看到 ESP 指向的地址及其值
在代码窗口按 F7,执行 401000 地址处的 PUSH 100 命令
ESP 的值变为了 19FF70,比原来减少了 4 个字节,并且当前栈顶指针指向了 19FF20 地址,该地址保存的值就是 100
也就是说,执行 PUSH 命令时,数值 100 被压入栈,ESP 随之向上移动,值减少 4 个字节
再次按 F7,执行 401005 地址的 POP EAX 命令
可以发现,ESP 的值增加了 4 个字节,变为了 19FF74,变为了一开始的状态
也就是说,从栈中弹出数据后,ESP 随之向下移动
总结:栈顶指针在初始状态指向栈底。向栈压入数据时,栈顶指针减小,向低地址移动;从栈中弹出数据时,栈顶指针增加,向高地址移动。
- 总结
第 3 到 5 章初看时可能感觉很多都是记忆类的知识,不太容易理解,尤其是寄存器相关,可以大概先留个印象,初步学习时,知道这个术语在这里出现过就可以了。
关键的点是栈的理解,可以结合实例去弄明白栈的特征
相关文章:
《逆向工程核心原理》第三~五章知识整理
查看上一章节内容《逆向工程核心原理》第一~二章知识整理 对应《逆向工程核心原理》第三章到第五章内容 小端序标记法 字节序 多字节数据在计算机内存中存放的字节顺序分为小端序和大端序两大类 大端序与小端序 BYTE b 0x12; WORD w 0x1234; DWORD dw 0x12345678; cha…...
影视文件大数据高速分发方案
在当今的数字时代,影视行业的内容创作和传播方式经历了翻天覆地的变化。随着4K、8K高清视频的普及,以及虚拟现实(VR)和增强现实(AR)技术的发展,影视文件的数据量正以前所未有的速度增长。这就要求行业内的参与者必须拥有高效的大数据传输解决…...
使用朴素贝叶斯对散点数据进行分类
本文将通过一个具体的例子,展示如何使用 Python 和 scikit-learn 库中的 GaussianNB 模型,对二维散点数据进行分类,并可视化分类结果。 1. 数据准备 假设我们有两个类别的二维散点数据,每个类别包含若干个点。我们将这些点分别存…...
pytorch线性回归模型预测房价例子
人工智能例子汇总:AI常见的算法和例子-CSDN博客 import torch import torch.nn as nn import torch.optim as optim import numpy as np# 1. 创建线性回归模型类 class LinearRegressionModel(nn.Module):def __init__(self):super(LinearRegressionModel, self).…...
微信登录模块封装
文章目录 1.资质申请2.combinations-wx-login-starter1.目录结构2.pom.xml 引入okhttp依赖3.WxLoginProperties.java 属性配置4.WxLoginUtil.java 后端通过 code 获取 access_token的工具类5.WxLoginAutoConfiguration.java 自动配置类6.spring.factories 激活自动配置类 3.com…...
C++运算符重载
C的运算符重载:使对象的运算表现得和编译器内置类型一样 以复数类为例: #include <iostream> using namespace std;class CComplex { public:CComplex(int r 0, int i 0): mreal(r), mimage(i){}// 指导编译器怎么做CComplex类对象的加法操作CC…...
pandas(三)Series使用
一、Series基础使用 import pandasd {x:100,y:200,z:300} s1 pandas.Series(d) #将dict转化为Series print(s1)print("") l1 [1, 2, 3] l2 [a, b, c] s2 pandas.Series(l1, indexl2) #list转为Series print(s2)print("") s3 pandas.Series([11…...
PVE 中 Debian 虚拟机崩溃后,硬盘数据怎么恢复
问题 在 PVE 中给 Debian 虚拟机新分配硬盘后,通过 Debian 虚拟机开启 Samba 共享该硬盘。如果这个 Debian 虚拟机崩溃后,怎么恢复 Samba 共享硬盘数据。 方法 开启 Samba 共享相关知识:挂载硬盘和开启Samba共享。 新建一个虚拟机…...
【大数据技术】案例01:词频统计样例(hadoop+mapreduce+yarn)
词频统计(hadoop+mapreduce+yarn) 搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell) 搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) 在阅读本文前,请确保已经阅读过以上两篇文章,成功搭建了Hadoop+MapReduce+Yarn的大数据集群环境。 写在前面 Wo…...
PySPARK带多组参数和标签的SparkSQL批量数据导出到S3的程序
设计一个基于多个带标签SparkSQL模板作为配置文件和多组参数的PySPARK代码程序,实现根据不同的输入参数自动批量地将数据导出为Parquet、CSV和Excel文件到S3上,标签和多个参数(以“_”分割)为组成导出数据文件名,文件已…...
分享刷题过程中有价值的两道题目
小编在这里先祝大家新的一年里所愿皆得,万事顺意,天天开心!!! 一.水仙花数 题目描述: 求100∼999中的水仙花数。若三位数ABCA^3B^3C^3,则称ABC为水仙花数。例如153,135333112527153&…...
Java篇之继承
目录 一. 继承 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 访问父类成员 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. super和this关键字 7. 子类构造方法 8. 代码块的执行顺序 9. protected访问修饰限定符 10. 继承方式…...
7.DP算法
DP 在C中,动态规划(Dynamic Programming,DP)是一种通过将复杂问题分解为重叠子问题来高效求解的算法设计范式。以下是DP算法的核心要点和实现方法: 一、动态规划的核心思想 重叠子问题:问题可分解为多个重…...
[SAP ABAP] 在ABAP Debugger调试器中设置断点
在命令框输入/H,点击回车以后,调试被激活,点击触发任意事件进入ABAP Debugger调试器界面 点击按钮,可以在Debugger调试器中新增临时断点 我们可以从ABAP命令、方法、功能、表单、异常、消息、源代码等多个维度在Debugger调试器中设…...
使用LLaMA-Factory对AI进行认知的微调
使用LLaMA-Factory对AI进行认知的微调 引言1. 安装LLaMA-Factory1.1. 克隆仓库1.2. 创建虚拟环境1.3. 安装LLaMA-Factory1.4. 验证 2. 准备数据2.1. 创建数据集2.2. 更新数据集信息 3. 启动LLaMA-Factory4. 进行微调4.1. 设置模型4.2. 预览数据集4.3. 设置学习率等参数4.4. 预览…...
2 [GitHub遭遇严重供应链投毒攻击]
近日,有黑客针对 Discord Top.gg 的GitHub 账户发起了供应链攻击,此次攻击导致账户密码、凭证和其他敏感信息被盗,同时也影响到了大量开发人员。 Checkmarx 在一份技术报告中提到,黑客在这次攻击中使用了多种TTP,其中…...
[c语言日寄]C语言类型转换规则详解
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
Python魔法函数
在Python中,的确有“魔法函数”(Magic Methods)这种说法,也被称为特殊方法(Special Methods)。这些函数的名称以双下划线开始和结束,例如 __init__、__len__ 等。它们为Python提供了一种约定俗成…...
Cypher入门
文章目录 Cypher入门创建数据查询数据matchoptional matchwhere分页with 更新数据删除数据实例:好友推荐 Cypher入门 Cypher是Neo4j的查询语言。 创建数据 在Neo4j中使用create命令创建节点、关系、属性数据。 create (n {name:$value}) return n //创建节点&am…...
excel如何查找一个表的数据在另外一个表是否存在
比如“Sheet1”有“张三”、“李四”“王五”三个人的数据,“Sheet2”只有“张三”、“李四”的数据。我们通过修改“Sheet1”的“民族”或者其他空的列,修改为“Sheet2”的某一列。这样修改后筛选这个修改的列为空的或者为出错的,就能找到两…...
【华为OD-E卷 - 连续出牌数量 100分(python、java、c++、js、c)】
【华为OD-E卷 - 连续出牌数量 100分(python、java、c、js、c)】 题目 有这么一款单人卡牌游戏,牌面由颜色和数字组成,颜色为红、黄、蓝、绿中的一种,数字为0-9中的一个。游戏开始时玩家从手牌中选取一张卡牌打出&…...
buu-jarvisoj_level0-好久不见30
嘶,我咋觉得这个也是栈溢出呢,找到读取的值,在再找到后门函数...
DeepSeek r1本地安装全指南
环境基本要求 硬件配置 需要本地跑模型,兼顾质量、性能、速度以及满足日常开发需要,我们需要准备以下硬件: CPU:I9内存:128GB硬盘:3-4TB 最新SSD,C盘确保有400GB,其它都可划成D盘…...
【论文笔记】Fast3R:前向并行muti-view重建方法
众所周知,DUSt3R只适合做稀疏视角重建,与sapnn3r的目的类似,这篇文章以并行的方法,扩展了DUSt3R在多视图重建中的能力。 abstract 多视角三维重建仍然是计算机视觉领域的核心挑战,尤其是在需要跨不同视角实现精确且可…...
开源智慧园区管理系统对比其他十种管理软件的优势与应用前景分析
内容概要 在当今数字化快速发展的时代,园区管理软件的选择显得尤为重要。而开源智慧园区管理系统凭借其独特的优势,逐渐成为用户的新宠。与传统管理软件相比,它不仅灵活性高,而且具有更强的可定制性,让各类园区&#…...
第四节 MATLAB变量
每个MATLAB变量可以是数组或者矩阵。 用一个简单的方法指定变量。例如: x 3 % defining x and initializing it with a value MATLAB执行上述语句,并返回以下结果: x 3 上述的例子创建了一个1-1的矩阵名为x和的值存储在其元素中…...
小红的小球染色期望
B-小红的小球染色_牛客周赛 Round 79 题目描述 本题与《F.R小红的小球染色期望》共享题目背景,但是所求内容与范围均不同,我们建议您重新阅读题面。 有 n 个白色小球排成一排。小红每次将随机选择两个相邻的白色小球,将它们染成红色。小红…...
c++井字棋(单人对电脑:1.电脑随机下 2.电脑AI;3.双人对决)
本游戏分两个模式,三种玩法: 每个玩法中的人下棋规则不变,如下: while (1) {/*输入*/int row,col;cout<<"请输入坐标(1索引):\n";cin>>row>>col;/*切换索引*/row--;col--;if(legal(row,col)) {prin…...
Python 原子操作:使用 `atomic` 模块保证线程安全
Python 原子操作:使用 atomic 模块保证线程安全 在多线程编程中,共享数据的访问往往需要考虑线程安全问题。如果多个线程同时修改同一个变量,可能会导致数据竞争,从而产生不可预测的结果。为了解决这个问题,我们可以使用原子操作。原子操作是指不可中断的操作,要么全部执…...
《解锁AI黑科技:数据分类聚类与可视化》
在当今数字化时代,数据如潮水般涌来,如何从海量数据中提取有价值的信息,成为了众多领域面临的关键挑战。人工智能(AI)技术的崛起,为解决这一难题提供了强大的工具。其中,能够实现数据分类与聚类…...
使用朴素贝叶斯对自定义数据集进行分类
准备自定义数据集 首先,需要一个自定义数据集来进行分类。创建一个简单的二维数据集,其中每个样本有两个特征,并且属于两个类别之一。 import numpy as np import pandas as pd# 创建自定义数据集 np.random.seed(42) num_samples 100# 生…...
《超自然》:科学与灵性融合的自我转变之路
在现代社会中,许多人开始探寻自我成长、身心疗愈与灵性提升的可能性。Bestselling author Dr. Joe Dispenza 的《超自然:普通人如何创造非凡人生》正是在这样的大背景下问世的。书中既融合了量子物理、神经科学和表观遗传学的前沿理论,又吸收…...
学习日记-250202
现在开始要继续写我的日记了......(也可以当作笔记吧) 一.论文 Prompt Transfer for Dual-Aspect Cross Domain Cognitive Diagnosis 主要内容: 主要是加入prompt提示, 为重叠实体设计个性化的提示,为非重叠实体设计共…...
AI(计算机视觉)自学路线
本文仅用来记录一下自学路线方便日后复习,如果对你自学有帮助的话也很开心o(* ̄▽ ̄*)ブ B站吴恩达机器学习->B站小土堆pytorch基础学习->opencv相关知识(Halcon或者opencv库)->四类神经网络(这里跟…...
游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)
Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…...
第二篇:多模态技术突破——DeepSeek如何重构AI的感知与认知边界
——从跨模态对齐到因果推理的工程化实践 在AI技术从单一模态向多模态跃迁的关键阶段,DeepSeek通过自研的多模态融合框架,在视觉-语言-语音的联合理解与生成领域实现系统性突破。本文将从技术实现层面,解构其跨模态表征学习、动态融合机制与…...
41. 缺失的第一个正数
参考题解:https://leetcode.cn/problems/first-missing-positive/solutions/7703/tong-pai-xu-python-dai-ma-by-liweiwei1419 难点在于时间复杂度控制在O(n),空间复杂度为常数级。 哈希表时间复杂度符合,但是空间复杂度为O(n) 排序空间复杂…...
DeepSeek R1 简易指南:架构、本地部署和硬件要求
DeepSeek 团队近期发布的DeepSeek-R1技术论文展示了其在增强大语言模型推理能力方面的创新实践。该研究突破性地采用强化学习(Reinforcement Learning)作为核心训练范式,在不依赖大规模监督微调的前提下显著提升了模型的复杂问题求解能力。 技…...
经典游戏红色警戒2之英语
1. New construction options 部署新的建筑物(一般是部署基地车时说的)。 2. Loading 等待。(正在进行) 3. Construction complete 建筑完成。 4. On hold 等待。(暂停进行) 5. Canceled 取消。 6. Ca…...
Zemax 中带有体素探测器的激光谐振腔
激光谐振腔是激光系统的基本组成部分,在光的放大和相干激光辐射的产生中起着至关重要的作用。 激光腔由两个放置在光学谐振器两端的镜子组成。一个镜子反射率高(后镜),而另一个镜子部分透明(输出耦合器)。…...
猴子吃桃问题
# 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,有多吃了一个,第二天早上有将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩的一半零一个。到第十天早上想再吃时࿰…...
ELECTRA:作为判别器而非生成器的预训练文本编码器
摘要 诸如BERT之类的掩码语言建模(MLM)预训练方法通过将某些标记替换为[MASK]来破坏输入,然后训练模型以重建原始标记。尽管这些方法在下游自然语言处理(NLP)任务中表现良好,但它们通常需要大量的计算资源…...
图论——最小生成树
最小生成树 给定一个无向图,在图中选择若干条边把图的所有节点连起来。要求边长之和最小。在图论中,叫做求最小生成树。 prim算法 prim 算法采用的是一种贪心的策略。 每次将离连通部分的最近的点和点对应的边加入的连通部分,连通部分逐渐扩大…...
【Linux-网络】初识计算机网络 Socket套接字 TCP/UDP协议(包含Socket编程实战)
🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长,行则将至 目录 📚一、初识计算机网络 📖 背景 📖 网络协议 🔖OSI七层…...
三数之和(15)
15. 三数之和 - 力扣(LeetCode) 可以一起总结的题目:三角形的最大周长(976)-CSDN博客 解法: class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector…...
6 Flink 状态管理
6 Flink 状态管理 1. State-Keyed State2. State-Operator State3. Broadcast State 我们前面写的 wordcount 的例子,没有包含状态管理。如果一个task在处理过程中挂掉了,那么它在内存中的状态都会丢失,所有的数据都需要重新计算。从容错和消…...
物联网 STM32【源代码形式-使用以太网】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】
物联网(IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器等装置与技术,实时采集并连接任何需要监控、连接、互动的物体或过程,实现对物品和过程的智能化感知、识别和管理。物联网的核心功能包括数据采集与监…...
elasticsearch8.15 高可用集群搭建(含认证Kibana)
文章目录 1.资源配置2.系统参数优化3.JDK17安装4.下载&安装ES 8.155.生成ES的证书(用于ES节点之间进行安全数据传输)6.修改ES 相关配置文件7.创建es用户并启动8.配置ES的账号和密码(用于ES服务端和客户端)9.下载和安装Kibana10.编辑Kibana配置文件11.启动Kiabana12.访问Kia…...
如何实现滑动网格的功能
文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverList组件相关的内容,本章回中将介绍SliverGrid组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverGrid组件是一种网格类组件,主要用来…...
DBASE DBF数据库文件解析
基于Java实现DBase DBF文件的解析和显示 JDK19编译运行,实现了数据库字段和数据解析显示。 首先解析数据库文件头代码 byte bytes[] Files.readAllBytes(Paths.get(file));BinaryBufferArray bis new BinaryBufferArray(bytes);DBF dbf new DBF();dbf.VersionN…...