【第34节】windows原理:PE文件的导出表和导入表
目录
一、导出表
1.1 导出表概述
1.2 说明与使用
二、导入表
2.1 导入表概述
2.2 说明与使用
一、导出表
1.1 导出表概述
(1)导出行为和导出表用途:PE文件能把自身的函数、变量或者类,提供给其他PE文件使用,这种行为就叫导出。导出表专门用来存放这些导出项目的信息。当一个PE文件要调用其他PE文件里的导出函数(变量、类)时,依靠导出表就能迅速找到它们在文件里的位置。一般来说,这些被导出的函数、变量、类,也叫做符号(Symbol)。
(2)导出项序号的特点:每一个被导出的函数(变量、类),都有一个独一无二的序号。在有些情况下,可能找不到对应的函数名(变量、类名),但函数(变量、类)的地址和序号是存在的,听说可以通过序号来调用这类函数。
(3)导出表的内容组成:导出表里面记录的内容,包含了函数(变量、类)的地址、序号,还有函数(变量、类)名。
(4)导出表的查找方法:数据目录表的第一个元素里有相对虚拟地址,利用前面讲过的相对虚拟地址转文件偏移的办法,就能找到导出表的位置(后面会给出具体代码) 。
导出表的数据结构如下:
typedef struct _IMAGE_EXPORT_DIRECTORY {DWORD Characteristics; //1( 没用)保留值,恒为0DWORD TimeDateStamp; //2( 没用)和文件头中的时间一样的。WORD MajorVersion; //3(没 用)主版本号WORD MinorVersion; //4 ( 没用 )次版本号DWORD Name; //5(有用)本PE文件的名字,也就是谁导出的这些函数(变量,类)DWORD Base; //6(有用)序号基数DWORD NumberOfFunctions;//7 (重要) 函数数量DWORD NumberOfNames; //8 (重要) 函数名称数量DWORD AddressOfFunctions;//9(重要)函数地址表的相对虚拟地址//RVA from base of imageDWORD AddressOfNames; //10(重要)函数名称表的相对虚拟地址//RVA from base of imageDWORD AddressOfNameOrdinals;//11(重要)序号表的相对虚拟地址//RVA from base of image
}IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
1.2 说明与使用
说明
(1)导出表存储位置:导出表一般在.edata段,不过.edata段通常会合并到.rdata段。
(2)序号基数:有个序号基数,从序号表得到的序号得加上它,才是真实函数序号,这方便在函数地址、序号和函数名之间互相查找。
(3)表项地址定位:导出表最后三个成员是相对虚拟地址,转换成文件偏移后,能找到函数地址表、函数名称表和序号表。
(4)函数名称表:函数名称表存的是函数名的相对虚拟地址,得再转换成文件偏移才能用,解析时要注意。
(5)导出表各表关系:
- 序号顺序:序号不是按顺序排列的。
- 对应关系:序号和函数名一一对应,两个表相同位置元素对应,所以结构体没设序号数量,因为它和函数名数量一样。
- 序号中断:序号可能中断,比如缺1、5,但不代表没对应的函数地址。
- 数量关系:函数个数比函数名个数多,多出来的可能是序号导出函数,也可能是地址填0的无效函数。
- 表间关联:序号表元素值对应函数地址表位置,该位置的函数地址就是对应函数名的地址,靠这个把三个表联系起来。
- 序号导出函数:函数地址表有地址值,但序号表没对应序号,说明是序号导出函数,序号就是它在函数地址表中的位置,没函数名。
- 无效函数:函数地址表元素填0,就是无效函数,没序号和函数名对应。
看下面这张导出表图示,能更好理解导出表。
函数表5、7位置是无效函数,2、3、4、6、8位置是函数名导出,注意函数名位置和地址表地址位置不同,1、9是序号导出函数,序号就是本身位置。
使用
(1)导出表信息提取:想提取导出表所有信息并过滤无效地址,得用循环,循环次数是函数地址个数。根据函数地址位置,在序号表找对应值,这个值的位置就是函数名位置。
代码思路如下,假设目标文件已读入内存,首地址为pFile(void类型指针),且用到之前计算偏移的函数:
for(Ordinal=0;Ordinal<函数个数;dwOrdinal++){if(!导出函数数组[Ordinal])continue ;for(Index=0;Index<函数个数;dwIndex++){if(导出序号数组[Index]== Ordinal ){输出带函数名的导出函数信息}elseif(已经遍历完导出表){输出不带函数名的导出函数信息}}
}
在LoadPE中,点击导出表的“...”即可弹出导出表界面,序号代表结构体中成员的序号。
导出表偏移:这个偏移是用数据目录中的相对虚拟地址算出来的
特征:特征值恒0
函数地址:函数地址的相对虚拟地址
函数名地址:函数名称的相对虚拟地址
函数名顺序地址:序号表的相对虚拟地址
名称:名称的相对虚拟地址
字符串名称:根据名称的地址算出编移存储的名称
(2)根据函数名查找函数地址:导出表还有其他用途,比如给定一个函数名,查找其函数地址,这类似于GetProcAddress()函数。在编写壳程序等特殊场景中会用到此功能。该方法比上述代码更简单,直接根据函数名找到其位置,该位置序号的值即为所要查找函数的地址索引。若要查找已加载到内存后的dll中的函数地址,就不应再使用文件偏移,而应直接使用虚拟地址(VA)。
二、导入表
2.1 导入表概述
(1)导入行为和导入表用途:PE文件运行过程中,如果用到其他PE文件里的函数、变量或者类,这种行为就叫做导入。导入表专门记录这部分信息。
(2)导入表的查找方法:数据目录表的第二个元素能帮我们定位导入表,查找的办法和找导出表一样。
(3)导入表的存储内容:导入表会记录从其他PE文件导入的函数名和序号。当PE文件加载到内存后,导入表还会保存这些函数的实际内存地址。
(4)导入表的结构特点:一个PE文件往往需要多个其他PE文件提供支持,所以导入表通常有多个。从结构上来说,导入表是一个结构体数组,数组以一个全零元素作为结束标志,数组里每个元素,都对应着一个PE文件的导入信息 。
2.2 说明与使用
导入表相关数据结构如下:
typedef struct _IMAGE_IMPORT_DESCRIPTOR
union {DWORD Characteristics; DWORD OriginalFirstThunk;//1(重要)指向一个结构体数组的相对虚拟地址(RVA), 结构体数组叫输入名称表
} DUMMYUNIONNAME;
DWORD TimeDateStamp; //2(有用)没用
DWORD ForwarderChain; //3(有用)转发机制用到,这里不探讨
DWORD Name; //4(有用)导入的PE文件的名字的相对虚拟地址RVA
DWORD FirstThunk; //5(重要)指向一个结构体数组的相对虚拟地址(RVA),结构体数组叫做输入地址表(IAT:Import Address Table)
}IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
说明
(1)指针指向特性:OriginalFirstThunk和FirstThunk这两个指针,都指向IMAGE_THUNK_DATA类型的结构体。
(2)磁盘与内存数据变化:在磁盘上的文件里,OriginalFirstThunk和FirstThunk所指向的数据是一样的。基于此,我们可以把输入名称表(INT)当作输入地址表(IAT)的备份。等到文件加载到内存后,加载器会把对应PE文件里函数的真实地址,填充到输入地址表中。这时,输入地址表才成了真正可用的输入地址表。
(3)输入名称表情况:有些文件的输入名称表内容全为零,处于空白状态。这意味着输入地址表有时没有备份。所以在解析输入表时,优先使用输入地址表;当然,也可以同时解析输入名称表和输入地址表,对比查看。
(4)解析终止条件:这两个指针指向的结构体数组,是以全零元素作为结尾的。我们可以利用这一特性,作为解析过程的结束标志。
(5)相关结构体介绍:
typedef struct _IMAGE_THUNK_DATA32 {union {DWORD ForwarderString; //转发用到DWORD Function; //导入函数的地址,在加载到内存后,这里才起作用DWORD Ordinal; //假如是序号导入的,用到这里DWORD AddressOfData; //假如是函数名导入的,用到这里,它指向一个PIMAGE_IMPORT_BY_NAME结构体}ul;
}IMAGE_THUNK_DATA32;
在磁盘文件中,起作用的只有后两个成员。该结构占4个字节,若最高位为1,则序号导入起作用,只需输出一个序号;若最高位为0,则最后一个成员起作用,指向一个PIMAGE_IMPORT_BY_NAME。可使用系统提供的宏IMAGE_SNAP_BY_ORDINAL32()判断最高位是否为1,参数为该结构体。
typedef struct _IMAGE_IMPORT_BY_NAME {WORD Hint;CHAR Name[1];
}IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
该结构包含序号和函数名。
使用:
//循环打印INT的内容
while(pINT->u1.Ordinal)
{//判断最高位是否不为1,是的话则打印其AddressOfData的内容if(!IMAGE_SNAP_BY_ORDINAL32(pINT->u1.Ordinal)){PIMAGE_IMPORT_BY_NAME pBN =获取ByName;printf("%04X %s\r\n",pBN->Hint,pBN->Name);}pINT++;continue;
}
//如果最高位为1,则直接打印Ordinal部分
printf("%04X %s\r\n",pINT->u1.Ordinal&0xFFFF,"(Null)");
pINT++;
原始 FirstThunk:导入名称表的RVA
FirstThunk:导入地址表的RVA
正向链:转发用
ThunkEVA:每-个Thunk统构的RVA(算的)
Thunk 偏移:Thunk结构的编移(算的)
Hint:函数的序号
API名称:函数的名称
计算每个Thunk结构的相对虚拟地址(RVA)时,只要知道第一个结构的RVA,后续结构的RVA依次加4就能得出。偏移计算方法也是一样,算出第一个偏移后,后续偏移每次加4。
LoadPE软件会对输入名称表(INT)和输入地址表(IAT)这两个数据域进行解析。软件默认展示INT的解析结果,如果点击软件下方“总是查看FirstThunk”复选框,软件就会显示IAT的解析结果。
到这里,关于导出表和导入表的解析说明就结束了。
相关文章:
【第34节】windows原理:PE文件的导出表和导入表
目录 一、导出表 1.1 导出表概述 1.2 说明与使用 二、导入表 2.1 导入表概述 2.2 说明与使用 一、导出表 1.1 导出表概述 (1)导出行为和导出表用途:PE文件能把自身的函数、变量或者类,提供给其他PE文件使用,这…...
Spring Boot事务管理详解(附银行转账案例)
一、事务基础概念 事务的ACID特性: 原子性(Atomicity):操作要么全部成功,要么全部失败一致性(Consistency):数据在事务前后保持合法状态隔离性(Isolation)&…...
(头歌作业—python)3.2 个人所得税计算器(project)
第1关:个人所得税计算器 任务描述 本关任务:编写一个个人所得税计算器的小程序。 相关知识 个人所得税缴纳标准 2018 年 10 月 1 日以前,个税免征额为 3500 元/月,调整后,个税免征额为 5000 元/月, 7 级超…...
在一个scss文件中定义变量,在另一个scss文件中使用
_variables.scss文件 : $line-gradient-init-color: linear-gradient(90deg, #8057ff 0%, #936bff 50%, #b892ff 100%); $line-gradient-hover-color: linear-gradient(90deg, #936bff 0%, #b892ff 50%, #f781ce 100%); $line-gradient-active-color: linear-gradient(90deg, …...
【计网】网络交换技术之电路交换(复习自用)
复习自用的,处理得比较草率,复习的同学或者想看基础的同学可以看看,大佬的话可以不用浪费时间在我的水文上了 1.电路交换定义 电路交换是一种通信方法,在通信开始之前,源和目的地之间建立一条专用的物理路径…...
MacOS 安装open webui
open-webui 不是一个 Python 包,所以 pip install open-webui 会失败。它是一个独立的 Web UI 应用,通常通过 Docker 或 手动构建 来运行。 如何正确安装 Open WebUI? 你可以选择 Docker 方式(推荐)或 手动安装。 方法…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例9,TableView16_09 嵌套表格拖拽排序
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例9,TableView16_09 嵌…...
开启ipv6与关闭的区别
在运行P2P CDN时,开启IPv6与关闭IPv6存在以下核心区别,需从技术、合规、运营等维度综合评估: 一、性能与效率 开启IPv6的优势 更大地址空间:IPv6支持海量设备接入,解决IPv4地址枯竭问题,便于P2P CDN节点扩…...
Redis + Caffeine多级缓存电商场景深度解析
Redis Caffeine多级缓存 Redis Caffeine多级缓存电商场景深度解析一、实施目的二、具体实施2.1 架构设计2.2 组件配置2.3 核心代码实现 三、实施效果3.1 性能指标对比3.2 业务指标改善3.3 系统稳定性 四、关键策略4.1 缓存预热4.2 一致性保障4.3 监控配置Prometheus监控指标 …...
Leecode Hot50
文章目录 矩阵Solution73. 矩阵置零Solution54. 螺旋矩阵Solution48. 旋转图像Solution240. 搜索二维矩阵 II二叉树二叉树的四种遍历结果Solution94. 二叉树的中序遍历Solution104. 二叉树的最大深度Solution226. 翻转二叉树Solution101. 对称二叉树Solution543. 二叉树的直径S…...
解决 Gradle 构建错误:Could not get unknown property ‘withoutJclOverSlf4J’
解决 Gradle 构建错误:Could not get unknown property ‘withoutJclOverSlf4J’ 在构建 Spring 源码或其他基于 Gradle 的项目时,可能会遇到如下错误: Could not get unknown property withoutJclOverSlf4J for object of type org.gradle…...
C++ 初阶总复习 (16~30)
C 初阶总复习 (16~30) 目的16. 2009. volatile关键字的作用17. 2010.什么是多态 简单介绍下C的多态18. 2011. 什么是虚函数 介绍下C中虚函数的原理19. 2012 构造函数可以是虚函数嘛20. 2013.析构函数一定要是虚函数嘛?21. 2015. 什么是C中的虚…...
TDengine 中的异常恢复
简介 本章主要介绍在 TDengine 执行命令过程中发生异常,如何手工终于执行的任务。可以终止连接,线上查询及终止事务。 如果一个事务 在一个复杂的应用场景中,连接和查询任务等有可能进入一种错误状态或者耗时过长迟迟无法结束,…...
二层框架组合实验
实验要求: 1,内网IP地址使用172.16.0.0/16分配 2,SW1和sw2之间互为备份 3,VRRP/STP/VLAN/Eth-trunk均使用 4,所有PC均通过DHCP获取IP地址 5,ISP只能配置IP地址 6,所有电脑可以正常访问ISP路由器环回 实验思路顺序: 创建vlan eth-trunk 划分v…...
IP综合实验
1.配置eth-trunk进行绑定 [LSW1]interface Eth-Trunk 0 [LSW1-Eth-Trunk0]q [LSW1]interface g0/0/2 [LSW1-GigabitEthernet0/0/2]eth-trunk 0 [LSW1-GigabitEthernet0/0/2]int g0/0/3 [LSW1-GigabitEthernet0/0/3]eth-trunk 0 [LSW1-GigabitEthernet0/0/3]display et…...
2025年信息系统与未来教育国际学术会议(ISFE 2025)
基本信息 官网:www.icedcs.net 时间:2025年4月18-20日 地点:中国-深圳 简介 2025年信息系统与未来教育国际学术会议(ISFE 2025)作为第二届粤港澳大湾区教育数字化与计算机科学国际学术会议(EDCS 2025&…...
nacos 外置mysql数据库操作(docker 环境)
目录 一、外置mysql数据库原因: 二、数据库准备工作 三、构建nacos容器 四、效果展示 一、外置mysql数据库原因: 想知道nacos如何外置mysql数据库之前,我们首先要知道为什么要外置mysql数据库,或者说这样做有什么优点和好处&am…...
Windows 10 ARM64平台MFC串口程序开发
Windows 10 IoT ARM64平台除了支持新的UWP框架,也兼容支持老框架MFC。使得用户在Windows 10 IoT下可以对原MFC工程进行功能升级,不用在新框架下重写整个工程。熟悉MFC开发的工程师也可以在Windows 10 IoT平台下继续使用MFC进行开发。 本文展示MFC串口程序…...
怎么使用pm2启动和暂停后端程序(后端架构nodejs+koa)
首先查看自己的pm2进程 pm2 list 或者 pm2 status 如果什么进程都没有,但是你确实有后端程序运行在服务器上,使用以下查看pm2程序的启动用户 ps aux | grep pm2就可以看到具体的用户和进行的信息 接着转换到你要操作的pm2的进程用户下 sudo su - …...
AI人工智能-Jupyter NotbookPycharm:Py开发
安装 命令: pip install jupyter 启动 命令: jupyter notebook 启动成功后,下面网址会默认自动打开当前用户的根目录。 其实这个页面显示的内容,是我们电脑目录C:\Users\当前用户\下的文件夹 我们平常做实验,希望在…...
uniapp-小程序地图展示
一、当前页面直接获取 <view class"map"><map id"myMap" style"width: 100%; height: 40vh;" :latitude"latitude":longitude"longitude" :markers"markers" :scale"scale" :show-location&qu…...
使用 Python 进行链上数据监控:让区块链数据触手可及
使用 Python 进行链上数据监控:让区块链数据触手可及 区块链技术正以前所未有的速度改变着各行各业,特别是在金融、供应链、物联网和智能合约等领域的应用,已经成为了一种新常态。然而,随着区块链网络的快速扩展和去中心化特性的不断强化,数据的可视化与监控变得愈发重要…...
CentOS 7 磁盘及分区管理笔记
一、查看磁盘信息 1. lsblk 命令 作用:列出系统中所有的块设备(包括磁盘、分区等)及其相关信息,如设备名称、大小、类型等。 命令格式:lsblk 示例: lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sd…...
python基础学习二(列表及字典的使用)
文章目录 列表列表的创建获取列表中的多个元素判断列表中元素是否存在列表元素的添加操作列表元素的删除操作列表元素的修改列表的排序列表生成式 字典字典的创建字典的常规操作字典的常用操作字典的视图操作字典元素的遍历字典的特点字典的生成式 列表 一个对象由id࿰…...
【NLP 50、损失函数 KL散度】
目录 一、定义与公式 1.核心定义 2.数学公式 3.KL散度与交叉熵的关系 二、使用场景 1.生成模型与变分推断 2.知识蒸馏 3.模型评估与优化 4.信息论与编码优化 三、原理与特性 1.信息论视角 2.优化目标 3.局限性 四、代码示例 代码运行流程 核心代码解析 抵达梦想靠的不是狂热…...
macOS Jdk1.8安装(目前主流版本的jdk)
Jdk1.8安装 1、jdk安装包下载链接2、下载安装包(根据自己是什么系统进行下载)3、下载完成之后双击安装包进行安装安装好之后查看查看安装的版本需要查看JDK的安装路径(一般在/Library/Java/JavaVirtualMachines)配置环境变量1、jdk安装包下载链接 jdk8下载链接 https://www.…...
树莓派5智能家居中控:HomeAssistant全配置指南
一、硬件选型与系统架构 1.1 树莓派5的硬件优势 2023年发布的树莓派5采用Broadcom BCM2712处理器(4核Cortex-A76架构),相比前代产品具有三大突破性改进: 接口升级:首次支持PCIe 2.0接口,可扩展万兆网卡或…...
Dubbo(22)如何配置Dubbo的服务提供者?
配置Dubbo的服务提供者是实现分布式服务架构的重要步骤。服务提供者负责将服务注册到注册中心,使得服务消费者可以发现并调用这些服务。下面以一个完整的Spring Boot项目为例,详细介绍如何配置Dubbo的服务提供者。 配置步骤 引入依赖:在项目…...
【通道注意力机制】【SENet】Squeeze-and-Excitation Networks
0.论文摘要 卷积神经网络建立在卷积操作的基础上,通过融合局部感受野内的空间和通道信息来提取有意义的特征。为了增强网络的表示能力,最近的一些方法展示了增强空间编码的好处。在本研究中,我们专注于通道关系,并提出了一种新颖…...
【SPP】蓝牙串口协议(SPP)深度解析:从 RS232 仿真到设备互联的技术实现
目录 一、SPP协议概述 1.1 SPP的定位与核心功能 1.2 协议栈层次(SPP 协议模型) 1.3 技术原理 1.4 用户需求 二、设备角色与连接模型 2.1 角色定义(DevA 与 DevB 交互) 2.2 角色动态切换 2.3 协议依赖关系 三、数据传输:从 RS232 到蓝牙的映射 3.1 控制信号仿真…...
5.Excel:从网上获取数据
一 用 Excel 数据选项卡获取数据的方法 连接。 二 要求获取实时数据 每1分钟自动更新数据。 A股市场_同花顺行情中心_同花顺财经网 用上面方法将数据加载进工作表中。 在表格内任意区域右键,刷新。 自动刷新: 三 缺点 Excel 只能爬取网页上表格类型的…...
基于RFID技术建筑物资材料智能管理解决方案
建筑行业仓库和物资材料管理面临诸多挑战,如工程设备重复利用的管理需求、物资出入库管理不规范、账物不符、物资丢失等问题。特别是在复杂多变的工地环境中,对物资进行科学规范的管理难度极大。上海岳冉基于RFID技术的建筑物资材料智能管理解决方案聚焦…...
详解CountDownLatch底层源码
大家好,我是此林。 今天来分享一下CountDownLatch的底层源码。 CountDownLatch 是 Java 并发包 (java.util.concurrent) 中的线程之间同步工具类,主要用于协调多个线程的执行顺序。其核心思想是通过计数器实现线程间的"等待-唤醒"机制&#…...
Python每日一题(9)
Python每日一题 2025.3.29 一、题目二、分析三、源代码四、deepseek答案五、源代码与ai分析 一、题目 question["""企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%,利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部…...
一阶谓词逻辑表示法、产生式表示法、框架表示法深度对比
前文我们已经深度学习了一阶谓词逻辑表示法、产生式表示法和框架表示法这三种知识表示方法,那么它们之间有什么异同点呢?接下来我们对它们进行深度对比。 首先,我得回忆这三种知识表示方法的基本概念和特点。 (1)一阶谓词逻辑(FOPL)是基于形式逻辑的,使用谓词、变量、量…...
Tomcat生产服务器性能优化
试想以下这个情景:你已经开发好了一个程序,这个程序的排版很不错,而且有着最前沿的功能和其他一些让你这程序增添不少色彩的元素。可惜的是,程序的性能不怎么地。你也十分清楚,若现在把这款产品退出市场,肯…...
【算法day25】 最长有效括号——给你一个只包含 ‘(‘ 和 ‘)‘ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
32. 最长有效括号 给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 https://leetcode.cn/problems/longest-valid-parentheses/ 2.方法二:栈 class Solution { public:int longestValid…...
Python之变量与数据类型总结
前言 一、基本数据类型 1、整数(int) 2、浮点数(float) 3、布尔值(bool) 4、字符串(str) 二、复合数据类型 1、列表(list) 1.1、列表基础 1.1.1、列…...
【大模型基础_毛玉仁】5.3 附加参数法:T-Patcher
目录 5.3 附加参数法:T-Patcher5.3.1 补丁的位置1)键值存储体2)补丁设计 5.3.2 补丁的形式5.3.3 补丁的实现1)准确性2)局部性 5.3 附加参数法:T-Patcher 附加参数法:通过引入可训练的额外参数实…...
【19期获取股票数据API接口】如何用Python、Java等五种主流语言实例演示获取股票行情api接口之沪深A股实时交易数据及接口API说明文档
在量化分析领域,实时且准确的数据接口是成功的基石。经过多次实际测试,我将已确认可用的数据接口分享给正在从事量化分析的朋友们,希望能够对你们的研究和工作有所帮助,接下来我会用Python、JavaScript(Node.js&…...
RSA 简介及 C# 和 js 实现【加密知多少系列_4】
〇、简介 谈及 RSA 加密算法,我们就需要先了解下这两个专业名词,对称加密和非对称加密。 对称加密:在同一密钥的加持下,发送方将未加密的原文,通过算法加密成密文;相对的接收方通过算法将密文解密出来原文…...
Koordinator-Metric查询
以CollectAllPodMetricsLast()举例,看看koordinator怎样使用tsdb进行查询。 CollectAllPodMetricsLast() GenerateQueryParamsLast()传入metric采集间隔2倍时间调用CollectAllPodMetrics()func CollectAllPodMetricsLast(statesInformer statesinformer.StatesInformer, metr…...
LeetCode1两数之和
**思路:**懒得写了,如代码所示 /*** Note: The returned array must be malloced, assume caller calls free().*/ struct hashTable {int key;//存值int val;//存索引UT_hash_handle hh; }; int* twoSum(int* nums, int numsSize, int target, int* re…...
AOA与TOA混合定位,MATLAB例程,三维空间下的运动轨迹,滤波使用EKF,附下载链接
本文介绍一个MATLAB代码,实现基于 到达角(AOA) 和 到达时间(TOA) 的混合定位算法,结合 扩展卡尔曼滤波(EKF) 对三维运动目标的轨迹进行滤波优化。代码通过模拟动态目标与基站网络&am…...
Java算法模板
合并区间 统计不同区间的元素个数 //合并区间List<Integer> result new ArrayList<>();int start intervals.get(0)[0];int end intervals.get(0)[1];for(int i1;i<intervals.size();i){int[] curr intervals.get(i);if(curr[0]>end){//不能合并&…...
软件架构设计中的软件过程模型初识
软件架构设计中的软件过程模型是指导软件开发过程的框架,它们定义了软件开发的不同阶段、活动、任务和角色。结合具体的使用场景,可以更好地理解这些模型如何在实际项目中应用。以下将详细介绍几种常见的软件过程模型,并结合典型场景进行讲解…...
征程 6E mipi tx 系列之方案介绍
MIPI TX 到车机显示系统设计指南 IDE 介绍 征程 6 IDE 架构图 IDE(Image Display Engine)包含图像显示单元(Image Display Unit)、图像数据输出模块(MIPI CSI2 Device 和 MIPI DSI)。通过 IDU 从内存中读…...
std::reference_wrapper 和 std::function的详细介绍
关于 std::reference_wrapper 和 std::function 的详细介绍及具体测试用例: 1. std::reference_wrapper(引用包装器) 核心功能 包装引用:将引用转换为可拷贝、可赋值的对象支持隐式转换:可自动转换为原始引用类型容器…...
【day4】数据结构刷题 树
6-1 二叉树的遍历 函数接口定义: void InorderTraversal( BinTree BT ); void PreorderTraversal( BinTree BT ); void PostorderTraversal( BinTree BT ); void LevelorderTraversal( BinTree BT ); 其中BinTree结构定义如下: typedef struct TNode *Po…...
基于Selenium的IEEE Xplore论文数据爬取实战指南
基于Selenium的IEEE Xplore论文数据爬取实战指南 一、项目背景与目标 IEEE Xplore作为全球知名的学术资源平台,收录了大量高质量科技文献。本教程将演示如何通过Python的Selenium库实现: 自动化获取指定领域论文列表(以"构音障碍"为例)完整提取论文标题、摘要、…...