【记录】Angr|Angr 标准库函数替换怎么看哪些库函数被Angr支持?
文章目录
- 前言
- 分析
- 什么是库函数替换?
- 为什么需要库函数替换?
- 如何查找支持的库函数
- 官方支持列表
- 目录结构说明
- 常用的替换包括哪些?
- 1. 字符串处理函数
- 2. 内存管理函数
- 3. 文件操作函数
- 高级技巧
- 1. 自定义库函数实现
- 2. 条件替换
- 常见问题与解决方案详解
- 1. 找不到合适的替换函数
- 问题表现
- 解决方案
- 1.1 源码分析法
- 1.2 自定义实现示例
- 1.3 使用近似替换
- 2. 替换后行为异常
- 问题表现
- 解决方案
- 2.1 函数签名检查
- 2.2 约束条件调整
- 2.3 状态空间控制
- 3. 性能问题
- 问题表现
- 解决方案
- 3.1 简化替换函数
- 3.2 深度限制
- 3.3 优化约束条件
- 实用建议
- 最佳实践总结
- 总结
前言
我在学习 Angr,这里会记录一些琐碎的、在中文引擎里一搜没找到解法的问题。Angr 是一种符号执行工具。
我的学习内容:
博主链接:Angr 使用技巧速通笔记(二) | TokameinE - 雨声淅淅沥沥,犬吠永不止息
Github 教程链接:https://github.com/jakespringer/angr_ctf
本博客是学习到 13_angr_static_binary 时产生的疑惑。
分析
什么是库函数替换?
在符号执行过程中,为了更好地控制执行流程和状态空间,Angr 会使用自己实现的版本来替换程序中的标准库函数调用。这些替换函数通常是原始函数的简化版本,专门为符号执行优化设计。
为什么需要库函数替换?
- 性能优化: 原始库函数可能过于复杂,会导致状态空间爆炸
- 行为控制: 可以更精确地控制函数行为,便于分析
- 符号执行支持: 确保函数可以正确处理符号值
- 跨平台兼容: 提供统一的函数行为,减少平台差异
如何查找支持的库函数
首先,Angr 标准库函数替换怎么看哪些库函数被Angr支持?这个问题 Angr_ctf 题解里面写了,提供了官方支持列表。
官方支持列表
Angr 的所有支持库函数都可以在其 GitHub 仓库中找到:
https://github.com/angr/angr/tree/master/angr/procedures
目录结构说明
angr/procedures/
├── libc/ # C标准库函数
├── posix/ # POSIX系统调用
├── win32/ # Windows API
├── linux_kernel/ # Linux内核函数
└── ...
进而不由产生其他疑问:
- 这么多库函数怎么知道自己想要的是哪个?
- 常用的替换包括哪些?
常用的替换包括哪些?
常用的替换有哪些?
Angr替换库函数的种类相对广泛,常见的包括:
- 内存相关函数:如
malloc
、free
、calloc
等。 - 字符串操作函数:如
strlen
、strcpy
、strncpy
等。 - 文件操作函数:如
open
、read
、write
、close
等。 - 系统调用:如
execve
、exit
等。 - 时间和日期相关:如
time
、gmtime
、localtime
等。
这些替换的函数一般都提供了简化版或精简版的实现,方便Angr进行符号执行和模拟。
1. 字符串处理函数
# 示例: 替换 strlen 函数
import angrdef analyze_strlen():proj = angr.Project('./target_binary')# 手动替换 strlenproj.hook_symbol('strlen', angr.SIM_PROCEDURES['libc']['strlen']())# 模拟执行state = proj.factory.entry_state()simgr = proj.factory.simulation_manager(state)simgr.explore()
常见字符串函数替换:
- strlen: 字符串长度计算
- strcpy: 字符串复制
- strncpy: 限制长度的字符串复制
- strcat: 字符串拼接
2. 内存管理函数
# 示例: 替换 malloc 和 free
def analyze_memory():proj = angr.Project('./target_binary')# 替换内存分配函数proj.hook_symbol('malloc', angr.SIM_PROCEDURES['libc']['malloc']())proj.hook_symbol('free', angr.SIM_PROCEDURES['libc']['free']())
常见内存函数:
- malloc: 动态内存分配
- calloc: 分配并清零内存
- realloc: 重新分配内存
- free: 释放内存
3. 文件操作函数
# 示例: 模拟文件操作
def analyze_file_ops():proj = angr.Project('./target_binary')# 替换文件操作函数proj.hook_symbol('fopen', angr.SIM_PROCEDURES['libc']['fopen']())proj.hook_symbol('fread', angr.SIM_PROCEDURES['libc']['fread']())proj.hook_symbol('fwrite', angr.SIM_PROCEDURES['libc']['fwrite']())proj.hook_symbol('fclose', angr.SIM_PROCEDURES['libc']['fclose']())
高级技巧
1. 自定义库函数实现
有时候 Angr 提供的默认实现可能不满足需求,我们可以自定义实现:
class CustomStrlen(angr.SimProcedure):def run(self, str_addr):# 自定义 strlen 实现strlen = 0while True:curr_char = self.state.memory.load(str_addr + strlen, 1)curr_val = self.state.solver.eval(curr_char)if curr_val == 0:breakstrlen += 1return strlen# 使用自定义实现
proj.hook_symbol('strlen', CustomStrlen())
2. 条件替换
根据不同条件使用不同的替换实现:
def conditional_hook(state):# 根据状态决定是否替换if state.solver.eval(state.regs.rax) > 0x1000:return angr.SIM_PROCEDURES['libc']['malloc']()return Noneproj.hook_symbol('malloc', conditional_hook)
常见问题与解决方案详解
后面这些解决方案由AI生成
1. 找不到合适的替换函数
问题表现
- 在 Angr 的标准库中找不到目标函数的实现
- 现有的替换函数不能完全满足分析需求
- 需要处理特殊的或非标准的库函数
解决方案
1.1 源码分析法
首先查看 Angr 源码中类似功能的实现:
# 示例:查找字符串比较相关的函数实现
# 路径:angr/procedures/libc/strcmp.pyclass strcmp(angr.SimProcedure):def run(self, a_addr, b_addr):# 实现细节pass# 如果需要实现类似的函数,可以参考这个模板
1.2 自定义实现示例
# 自定义一个复杂的字符串处理函数
class CustomStrProcess(angr.SimProcedure):def run(self, str_addr, len_param):# 1. 参数处理strlen = self.state.solver.eval(len_param)if strlen > 1000: # 添加合理的限制strlen = 1000# 2. 内存读取string = self.state.memory.load(str_addr, strlen)# 3. 实现特定的处理逻辑processed = self.process_string(string)# 4. 处理返回值return processeddef process_string(self, string):# 实现具体的处理逻辑pass# 使用自定义函数替换
proj.hook_symbol('target_function', CustomStrProcess())
1.3 使用近似替换
如果无法完全匹配原函数功能,可以使用功能相近的替换:
# 示例:用 strncmp 替换 strcmp
proj.hook_symbol('strcmp', angr.SIM_PROCEDURES['libc']['strncmp'](length=100))
2. 替换后行为异常
问题表现
- 程序执行路径不符合预期
- 符号执行过程中出现异常
- 分析结果不准确
解决方案
2.1 函数签名检查
# 正确的函数签名示例
class CorrectMemcpy(angr.SimProcedure):def run(self, dest_addr, src_addr, length):# 确保参数类型正确if not isinstance(length, claripy.ast.Base):length = self.state.solver.BVV(length, self.state.arch.bits)# 实现内存复制逻辑return dest_addr# 使用方法
proj.hook_symbol('memcpy', CorrectMemcpy())
2.2 约束条件调整
def add_constraints(state):# 添加基本约束buff_addr = state.regs.rdi # 假设缓冲区地址在 rdi 寄存器# 限制缓冲区大小state.add_constraints(state.mem[buff_addr].uint32_t != 0)state.add_constraints(state.mem[buff_addr].uint32_t < 1024)# 限制字符范围for i in range(32):curr_byte = state.memory.load(buff_addr + i, 1)state.add_constraints(curr_byte >= 0x20)state.add_constraints(curr_byte <= 0x7e)# 在符号执行前添加约束
state = proj.factory.entry_state()
add_constraints(state)
2.3 状态空间控制
# 设置执行超时和内存限制
def explore_with_limits():proj = angr.Project('./target_binary')state = proj.factory.entry_state()# 创建模拟管理器simgr = proj.factory.simulation_manager(state)# 设置探索限制simgr.explore(find=lambda s: b"success" in s.posix.dumps(1),avoid=lambda s: b"fail" in s.posix.dumps(1),n_find=1, # 只需要找到一个解max_active=1000, # 限制活动状态数量timeout=300 # 设置超时(秒))
3. 性能问题
问题表现
- 符号执行速度过慢
- 内存消耗过大
- 状态爆炸
解决方案
3.1 简化替换函数
# 简化版的 strlen 实现
class FastStrlen(angr.SimProcedure):def run(self, str_addr):# 设置最大搜索长度MAX_LEN = 64# 快速扫描定长for i in range(MAX_LEN):curr_char = self.state.memory.load(str_addr + i, 1)is_null = self.state.solver.is_true(curr_char == 0)if is_null:return ireturn MAX_LEN# 使用简化版本
proj.hook_symbol('strlen', FastStrlen())
3.2 深度限制
def limited_exploration():proj = angr.Project('./target_binary')state = proj.factory.entry_state()simgr = proj.factory.simulation_manager(state)# 设置探索策略simgr.use_technique(angr.exploration_techniques.LoopSeer(loops=[0x400c40, 0x400d30], # 指定循环的地址bound=10 # 限制循环执行次数))# 限制执行深度simgr.use_technique(angr.exploration_techniques.LengthLimiter(max_length=1000 # 最大执行步数))return simgr.run()
3.3 优化约束条件
def optimize_constraints():proj = angr.Project('./target_binary')state = proj.factory.entry_state()# 1. 添加智能约束input_size = 32input_chars = [state.solver.BVS(f'c{i}', 8) for i in range(input_size)]# 2. 使用批量约束而不是单字符约束printable = state.solver.And(state.solver.And(c >= 0x20, c <= 0x7e) for c in input_chars)state.add_constraints(printable)# 3. 使用预设值减少求解空间known_prefix = b"FLAG{"for i, c in enumerate(known_prefix):state.add_constraints(input_chars[i] == c)return state
实用建议
- 日志与调试
很有用
# 开启详细日志
import logging
logging.getLogger('angr').setLevel(logging.DEBUG)# 添加调试点
@proj.hook(0x400c40)
def debug_hook(state):print(f"执行到地址 0x400c40")print(f"寄存器状态: {state.regs}")print(f"内存内容: {state.mem[state.regs.rsp].uint64_t.concrete}")
- 性能监控
import time
import resourcedef monitor_execution():start_time = time.time()start_memory = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss# 执行分析result = run_analysis()end_time = time.time()end_memory = resource.getrusage(resource.RUSAGE_SELF).ru_maxrssprint(f"执行时间: {end_time - start_time:.2f} 秒")print(f"内存使用: {(end_memory - start_memory) / 1024:.2f} MB")return result
最佳实践总结
-
渐进式调试
- 先用简单的替换函数测试
- 逐步添加复杂功能
- 持续监控性能变化
-
模块化设计
- 将复杂的替换函数拆分为小模块
- 便于测试和维护
- 提高代码复用性
-
错误处理
- 添加适当的错误处理机制
- 设置合理的超时和限制
- 保存中间状态便于调试
这些解决方案和最佳实践可以帮助你处理 Angr 库函数替换过程中遇到的大多数问题。在实际应用中,可能需要根据具体情况组合使用多种方案。
总结
库函数替换是 Angr 符号执行中的重要机制,掌握它能够帮助我们更好地控制程序分析过程。本文详细介绍了:
- 库函数替换的基本概念
- 如何查找和使用支持的库函数
- 常用替换函数的详细说明
- 实战案例演示
- 高级使用技巧
- 常见问题的解决方案
希望这篇文章能够帮助读者更好地理解和使用 Angr 的库函数替换功能。
本账号所有文章均为原创,欢迎转载,请注明文章出处:https://shandianchengzi.blog.csdn.net/article/details/144883082。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
相关文章:
【记录】Angr|Angr 标准库函数替换怎么看哪些库函数被Angr支持?
文章目录 前言分析什么是库函数替换?为什么需要库函数替换? 如何查找支持的库函数官方支持列表目录结构说明 常用的替换包括哪些?1. 字符串处理函数2. 内存管理函数3. 文件操作函数 高级技巧1. 自定义库函数实现2. 条件替换 常见问题与解决方案详解1. 找不到合适的…...
npx和npm和pnpm的异同
npx、npm 和 pnpm 都是用于管理和运行 JavaScript/Node.js 包的工具,但它们的功能和使用场景有所不同。以下是它们之间的异同点: 一、共同点 Node.js 包管理生态的一部分: 它们都围绕 Node.js 生态系统,提供包管理功能。 支持安装…...
【蓝桥杯比赛-C++组-经典题目汇总】
1. 最短路 题目描述: 如下图所示,G是一个无向图,其中蓝色边的长度是1、橘色边的长度是2、绿色边的长度是3。 则从 A 到 S 的最短距离是多少? #include <iostream> #include <cstring> using namespace std; const i…...
redis7基础篇2 redis的主从模式1
目录 一 主从模式 1.1 主从复制的作用 1.2 配置常用命令 1.3 主从复制常见问题 1.4 主从复制的缺点 1.5 redis主从复制原理 二 redis主从复制的搭建流程 2.1 注意事项 2.2 redis的主从复制架构图 2.3 以6379.conf配置文件配置为例 2.4 以6380.conf配置文件配置为例 …...
QT----------QT Data Visualzation
实现思路: 配置项目:在 .pro 文件中添加 QT datavisualization 以引入 QT Data Visualization 模块。创建主窗口:使用 QMainWindow 作为主窗口,添加 Q3DScatter、Q3DBars 和 Q3DSurface 等三维视图组件。初始化和创建三维图表&a…...
默认ip无法访问,利用dhcp功能获取ip进行访问的方法
应用场景: ac的默认ip如192.168.1.1在pc与ac的eth2以后网口直连无法ping通,而且pc改为dhcp自动获取ip也获取不到ip地址,无法进行web配置和命令行操作。 原因是ac或其他设备被修改了默认ip或者端口vlanid,现在的端口vlan对应子接…...
重学 Android 自定义 View 系列(十):带指针的渐变环形进度条
前言 该篇文章根据前面 重学 Android 自定义 View 系列(六):环形进度条 拓展而来。 最终效果如下: 1. 扩展功能 支持进度顺时针或逆时针显示在进度条末尾添加自定义指针图片使用线性渐变为进度条添加颜色效果 2. 关键技术点解析 2.1 进度方向控制的…...
websocket在各主流浏览器中默认的请求头是如何设置的?
谷歌浏览器(Chrome) 在谷歌浏览器中,当创建一个 WebSocket 连接时,会自动添加一些标准的请求头。其中包括Sec - WebSocket - Key,这个是一个 Base64 - 编码的随机值,长度为 16 字节。它用于在服务器端进行安全验证,确保连接的合法性。例如,Sec - WebSocket - Key: dGhl…...
C++之map和set的模拟实现
目录 引言 红黑树迭代器实现 红黑树元素的插入 map模拟实现 set模拟实现 之前我们已经学习了map和set的基本使用,但是因为map和set的底层都是用红黑树进行封装实现的,上期我们已经学习了红黑树的模拟实现,所以本期我们在红黑树模拟实现…...
大学物理(2)期末复习笔记【1】
图片不知道咋回事居然不能直接复制上来,过段时间修改好再编辑一下 9. 振动 一、振动 def:某一物理量在某一数值附近做周期性变化 周期(T):完成一次往复运动所需要的时间(s) 频率(…...
25.1.3
java数组: dataType[] arrayRefVar //推荐写法 //int[] mylist //或 dataType arrayRefVar[] //int mylist[]创建数组对象: arrayRefVar new dataType[arraySize]; dataType[] arrayRefVar new dataType[arraySize];for-each循环: jav…...
数据库知识汇总2
一. 范式 定义:范式是符合某一种级别的关系模式的集合。 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式; 一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一…...
SpringBoot:生成条形码的项目
在软件开发中,条形码和二维码的生成与解析是一项常见需求,特别是在商品管理、物流跟踪、支付验证等场景。Spring Boot 作为一个流行的微服务框架,提供了快速构建应用的能力。本文将介绍如何在 Spring Boot 项目中生成条形码,并提供…...
docker内外如何实现ROS通信
写在前面 在一台电脑上装有docker,docker内外均装有ROS系统,现在想要实现docker内外的ROS通信,怎么办呢? 首先,因为是同一台电脑的docker内外,所以IP本身是互通的,不需要在/etc/hosts中添加IP…...
leetcode 面试经典 150 题:多数元素
链接多数元素题序号169题型数组解法1. 排序法、2. Boyer-Moore投票算法难度简单熟练度✅✅✅✅✅ 题目 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的…...
SpringBoot返回文件让前端下载的几种方式
01 背景 在后端开发中,通常会有文件下载的需求,常用的解决方案有两种: 不通过后端应用,直接使用nginx直接转发文件地址下载(适用于一些公开的文件,因为这里不需要授权)通过后端进行下载&#…...
论述数据、数据库、数据库管理系统、数据库系统的概念。
数据是指描述事物特征的符号记录,可以是数字、文字、图像、音频等形式。数据在现代社会中广泛存在于各个领域,对于组织和管理数据,提供数据的可靠性、一致性和安全性至关重要。 数据库是一个有组织的数据集合,它存储在计算机系统…...
【深度学习基础之多尺度特征提取】多尺度卷积神经网络(MS-CNN)是如何在深度学习网络中提取多尺度特征的?附代码(二)
【深度学习基础之多尺度特征提取】多尺度卷积神经网络(MS-CNN)是如何在深度学习网络中提取多尺度特征的?附代码(二) 【深度学习基础之多尺度特征提取】多尺度卷积神经网络(MS-CNN)是如何在深度…...
企业AAA认证的好处
体系认证#ISO三体系认证 #三体系认证好处 #企业双软认证好处 #ISO体系认证有哪些#体系认证办理流程及费用#招投标#招投标必备资质 企业信用评级AAA认证 办理条件及流程! 一、企业申请3A认证好处有哪些? 1.提高企业信誉: 拥有3A企业信用等级证书意味…...
PyTorch AMP 混合精度中grad_scaler.py的scale函数解析
PyTorch AMP 混合精度中的 scale 函数解析 混合精度训练(AMP, Automatic Mixed Precision)是深度学习中常用的技术,用于提升训练效率并减少显存占用。在 PyTorch 的 AMP 模块中,GradScaler 类负责动态调整和管理损失缩放因子&…...
分数阶傅里叶变换代码 MATLAB实现
function Faf myfrft(f, a) %分数阶傅里叶变换函数 %输入参数: %f:原始信号 %a:阶数 %输出结果: %原始信号的a阶傅里叶变换N length(f);%总采样点数 shft rem((0:N-1)fix(N/2),N)1;%此项等同于fftshift(1:N),起到翻…...
腾讯云OCR在制造业的应用:内存模组产品识别实战指南
腾讯云OCR在制造业的应用 一、 背景二、 腾讯云OCR技术概述三、 内存模组产品识别需求四、基于腾讯云OCR的内存模组产品识别4.1、准备工作4.2、API调用与代码实现 五、 代码示例六、 应用场景七、 总结 一、 背景 制造业在产品识别环节经历着前所未有的挑战。传统的依赖人工进…...
基于STM32F1的基本定时器的原理
一,基本定时器原理 1,进入数据手册,了解基本定时器的主要特征 2,看懂理解基本定时器框图 3,查阅2.3章中的存储器映像以及时钟树就可以知道定时器是挂载在哪个总线下,从而知道对应是时钟频率 4,…...
Adobe Acrobat Pro DC 2023 下载安装教程,附详细图文
简介: Adobe Acrobat Pro DC 2023 是由 Adobe 公司推出的一款全面的 PDF 编辑、查看和管理软件。这款软件无论是个人用户还是企业级用户,都可以凭借其强大的功能满足不同的需求。作为一款业内领先的 PDF 处理工具,Adobe Acrobat Pro DC 不仅…...
活动预告 |【Part1】 Azure 在线技术公开课:迁移和保护 Windows Server 和 SQL Server 工作负载
课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft 云技术的了解。参加我们举办的“迁移和保护 Windows Server 和 SQL Server 工作负载”活动,了解 Azure 如何为将工作负载…...
根据 el-dialog 的高度动态计算 el-table 的高度
根据 el-dialog 的高度动态计算 el-table 的高度,可以使用 Vue 的 ref 和生命周期钩子来实现。以下是一个实现方案: 首先,给 el-dialog 和 el-table 添加 ref: <el-dialogv-model"testInstrumentDialogVisible"tit…...
算法解析-经典150(双指针、滑动窗口)
文章目录 双指针1.验证回文串1.答案2.思路 2.判断子序列1.动态规划解法2.双指针 3.两数之和 II - 输入有序数组1.答案2.思路 4.盛最多水的容器1.答案2.思路 5.三数之和1.答案2.思路 滑动窗口1.长度最小的子数组1.答案2.思路 2.无重复字符的最长子串1.答案2.思路 3.最小覆盖子串…...
Postman[2] 入门——界面介绍
可参考官方 文档 Postman 导航 | Postman 官方帮助文档中文版Postman 拥有各种工具、视图和控件,帮助你管理 API 项目。本指南是对 Postman 主要界面区域的高级概述:https://postman.xiniushu.com/docs/getting-started/navigating-postman 1. Header&a…...
GAMES101学习笔记(一):Overview 计算机图形学概述
文章目录 关于计算机图形学本课程讨论的话题光栅化曲线和网格光线追踪动画/仿真 课程大纲CG vs CV图形学的依赖学科线性代数回顾 课程资源:GAMES101-现代计算机图形学入门-闫令琪 Lec1 ~ Lec2 学习笔记: Lecture 01 :Overview of Computer G…...
iOS 18手机不越狱玩MC java版---PojavLauncher
环境 手机: iPhone SE 3 iOS: 18.1.1 电脑操作系统:macOS Sequoia 15.1.1 步骤 电脑上安装altstore https://altstore.io/ 直接下载自己操作系统对应的版本即可。 安装altstore到手机 以下是我记忆中的步骤,关键步骤我提一下 手机连接…...
uni-app开发-习惯养成小程序/app介绍
目录 一:功能概述 二:功能部分代码和截图 一:功能概述 1 习惯目标生成 创建习惯:用户可以添加新的习惯目标,每个习惯可以包含名称、描述、图标、目标天数。 关联习惯完成:用户通过设定达成目标以后,生成习惯养成记录。 2 习惯打卡 简单快捷的打卡:提供一个直观的界面…...
服务器迁移中心——“工作组迁移”使用指南
简介 服务器迁移中心(Server Migration Center,简称SMC)是阿里云提供给您的迁移平台。专注于提供能力普惠、体验一致、效率至上的迁移服务,满足您在阿里云的迁移需求。 工作组迁移是SMC的一项功能,提供标准化迁移流程…...
下载离线的瓦片图是做了模糊处理嘛?
问题: 1.下载离线的瓦片图是做了模糊处理嘛? 2.怎么加载自己的离线瓦片图比实际图片模糊了很多?啊 3.同层级的图片都比实际的图片模糊 原因:https://zhuanlan.zhihu.com/p/389945647 可以尝试下略微优化下: 1.降低…...
日志聚类算法 Drain 的实践与改良
在现实场景中,业务程序输出的日志往往规模庞大并且类型纷繁复杂。我们在查询和查看这些日志时,平铺的日志列表会让我们目不暇接,难以快速聚焦找到重要的日志条目。 在观测云中,我们在日志页面提供了聚类分析功能,可以…...
git 问题解决记录
在用git上传文件到仓库中出现了2个问题 第一个问题: 需要修改git的代理端口与电脑自己的代理服务器设置中的端口和VPN的端口保持一致, 比如我的端口是7897,就设置 git config --global http.proxy http://127.0.0.1:7897 git config --glo…...
Node Exporter常用Prometheus指标
Node Exporter 是一个常用的 Prometheus 导出器,用于采集主机操作系统层面的指标。以下是 Node Exporter 中一些常用的指标分类和关键指标: 1. CPU 相关指标 常用指标: CPU 使用率 rate(node_cpu_seconds_total{mode!"idle"}[5m]…...
golang 编程规范 - 项目目录结构
原文:https://makeoptim.com/golang/standards/project-layout 目录结构 Go 目录 cmdinternalpkgvendor 服务端应用程序目录 api Web 应用程序目录 web 通用应用程序目录 buildconfigsdeploymentsinitscriptstest 其他目录 assetsdocsexamplesgithooksthird_par…...
【ArcGISPro/GeoScenePro】裁剪和打包栅格数据
检查并处理扫描地图 数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 使用标准相机或扫描仪创建的数字影像通常存储在 RGB 颜色模型中,这意味着这些影像将由红色、绿色和蓝色三个栅格组成。 此扫描地图在提供给您之前已在坐标系…...
数据库新建用户后(Host:%),报错:localhost无法连接
存在问题 在给数据库(MySQL、MariaDB等)创建了新的用户名(eg:maxscale)后,无法使用新用户名登录,并报如下错误:ERROR 1045 (28000): Access denied for user maxscalelocalhost (us…...
[文献阅读] Reducing the Dimensionality of Data with Neural Networks
文章目录 摘要Abstract:RBM自编码器深层自编码器初始化展开微调 实验总结 摘要 Reducing the Dimensionality of Data with Neural Networks Reducing the Dimensionality of Data with Neural Networks | Science 使用神经网络降低数据的维度 由Hinton在2006年于Science上发…...
Sublime Text4 4189 安装激活【 2025年1月3日 亲测可用】
-----------------测试时间2025年1月3日------------------- 下载地址 官方网址:https://www.sublimetext.com 更新日志:https://www.sublimetext.com/download V4189 64位:https://www.sublimetext.com/download_thanks?targetwin-x64 ....…...
自相关性的数值越接近于1说明什么
自相关性数值越接近于 1,通常表明以下几点: 1. 强正相关 - 自相关系数接近于 1 表示当前值与其滞后值之间存在强正相关关系。这意味着,当当前值较高时,之前的值也倾向于较高,反之亦然。 2. 时间序列的持久性 - 如果…...
【ArcGIS Pro微课1000例】0064:栅格目录、栅格数据集、镶嵌数据集
一、栅格目录与栅格数据集 1. 定义 栅格目录:是一个用于管理和组织栅格数据集的结构,通常包含多个栅格数据集的元数据和索引信息。它相当于一个文件夹,里面可以存放多个栅格文件。可以将工作空间转栅格目录。 栅格数据集:是指单个的栅格数据文件,包含了具体的空间数据,…...
单片机-静动态数码管实验
P0控制数码管 ,P0低电平 P1,P2,P3高电平 1、静态数码管 需求:数码管显示0,即让p0端口输出数字0的段码0x3f(共阴) #include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; //数码管显示数字的数组 共阴极 …...
学术写作中的各种流程图如何利用Kimi进行辅助构建?
目录 1.学术论文中的流程图 2.一些小实践 3.论文中严谨的实践流程 近期小编在思考使用AI工具制作流程图和思维导图,结果发现Kimi现在支持流程图了,Kimi在学术写作中的应用变得更加广泛和深入。随着AIGC技术的不断进步,Kimi的功能将更加强大…...
halcon中图像处理及图像滤波
图像滤波简介 图像滤波的方法主要分为两大类:空间域方法和频域方法。 空间域方法是以对图像的像素直接进行处理为基础,包括均值滤波、中值滤波、高斯滤波等;频域方法则是以修改图像在傅里叶变换空间的值为基础的,包括高通滤波、低通滤波、同态滤波等。 1.空间域图像滤波 图…...
【pyqt】(三)designer
designer ui设计 在学习后续的代码之前,我们可以先学习一下designer这款工具,在安装软件的时候我们有提到过,其具体位置在虚拟环境根目录下的\Lib\site-packages\PySide6文件夹中。对于新手而言,使用这种可视化的工具可以帮助我们…...
微服务之服务治理——Eureka
CAP原则: Consistency(一致性):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本) Availability(可用性):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求…...
JS 中 json数据 与 base64、ArrayBuffer之间转换
JS 中 json数据 与 base64、ArrayBuffer之间转换 json 字符串进行 base64 编码 function jsonToBase64(json) {return Buffer.from(json).toString(base64); }base64 字符串转为 json 字符串 function base64ToJson(base64) {try {const binaryString atob(base64);const js…...
C#实现画图,及实现图像运动,C#中GDI+图形图像技术(Graphics类、Pen类、Brush类)C#之快速入门GDI+绘图 C#实现快速画图功能
下载源码 <-------- 在C#的世界里,GDI如同一位多才多艺的艺术家,以其强大的绘图能力,让开发者能够轻松地在应用程序中挥洒创意,绘制出丰富多彩的图形世界。GDI不仅支持基本的几何图形绘制,还能处理复杂的图像处理任…...