PE结构之导出表

news2024/12/26 10:46:47
导出表结构中各种值的意义
​​​​​​

 根据函数地址表遍历函数名称RVA表,和上面的图是逆过程

//函数地址表 和当前内存中的位置
		DWORD AddressOfFunctionsFOA = RVAToFOA(LPdosHeader, LPexprotDir->AddressOfFunctions);
		PDWORD LPFunctionsAddressInMemary = (PDWORD)((char*)LPdosHeader + AddressOfFunctionsFOA);
		//名称序号表的FOA 和在当前内存的位置
		DWORD AddressOfNameOrdinalsFOA = RVAToFOA(LPdosHeader, LPexprotDir->AddressOfNameOrdinals);
		PWORD WPNameOrdinalsInMemary = (PWORD)((char*)LPdosHeader + AddressOfNameOrdinalsFOA);

		//名称字符串RVA表和在当前内存的位置
		DWORD AddressOfNamesFOA = RVAToFOA(LPdosHeader, LPexprotDir->AddressOfNames);
		PDWORD LPNamesAddressInMemary= (PDWORD)((char*)LPdosHeader + AddressOfNamesFOA);

		//遍历函数地址表 ,
		for (size_t i = 0; i < LPexprotDir->NumberOfFunctions; i++)
		{
			printf("[%d]",i);
			/*-----------------------------------------------
			
				使用.def文件导出函数时,如果序号之间有空位比如
				EXPORTS
				add    @2
				sub    @3 NONAME
				mul    @7
				div1    @8
				那么在函数地址表中就会有 0地址填充
			-------------------------------------------------*/
			if (*LPFunctionsAddressInMemary == 0)
			{
				printf("0x%x\n", *LPFunctionsAddressInMemary);
				continue;
			}
			printf("\t\t\t0x%x", *LPFunctionsAddressInMemary);
			//遍历名称序号表
			/*-----------------------------------------------
			* 如果函数地址表的索引 和 名称序号表中的值相同,说明这个函数
			* 是以名称导出的
			-------------------------------------------------*/
			for (size_t j = 0; j< LPexprotDir->NumberOfNames; j++)
			{

				if (*WPNameOrdinalsInMemary == i)//如果 函数地址表的索引 == 名称序号表中保存的值,说明这个函数是以 名称导出的
				{
					
					printf("\t\t\t\t%d", *WPNameOrdinalsInMemary);
					//输出函数的名称
					/*------------------------------------------------ -
					* 名称序号表的 索引 就对于 函数名称RVA表 的索引
					* 这样就可以去找函数名了
					------------------------------------------------ - */
					char* str = (char*)LPdosHeader + RVAToFOA(LPdosHeader, LPNamesAddressInMemary[j]);
					printf("\t\t\t%s\t\t\t%d\n", str, LPexprotDir->Base+ *WPNameOrdinalsInMemary);
				}

				WPNameOrdinalsInMemary++;
			}
			WPNameOrdinalsInMemary = (PWORD)((char*)LPdosHeader + AddressOfNameOrdinalsFOA);

			LPFunctionsAddressInMemary++;
		}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flask发送邮件

开通邮件IMAP/SMTP服务 以网易邮箱为例 点击开启发送验证后会收到一个密钥&#xff0c;记得保存好 编写代码 安装flask-mail pip install flask-mail在config.py文件中配置邮件信息 MAIL_SERVER&#xff1a;邮件服务器 MAIL_USE_SSL&#xff1a;使用SSL MAIL_PORT&#…

【计算机网络】网络相关技术介绍

文章目录 NAT概述NAT的基本概念NAT的工作原理1. **基本NAT&#xff08;静态NAT&#xff09;**2. **动态NAT**3. **NAPT&#xff08;网络地址端口转换&#xff0c;也称为PAT&#xff09;** 底层实现原理1. **数据包处理**2. **转换表**3. **超时机制** NAT的优点NAT的缺点总结 P…

Linux:多线程中的生产消费模型

多线程 生产消费模型三种关系两个角色一个交易场所交易场所的实现&#xff08;阻塞队列&#xff09;pthread_cond_wait 接口判断阻塞队列的空或满时&#xff0c;需要使用while测试一&#xff1a;单消费单生产案例测试二&#xff1a;多生产多消费案例 生产消费模型 消费者与生产…

鸿蒙网络管理模块05——数据流量统计

如果你也对鸿蒙开发感兴趣&#xff0c;加入“Harmony自习室”吧&#xff01;扫描下方名片&#xff0c;关注公众号&#xff0c;公众号更新更快&#xff0c;同时也有更多学习资料和技术讨论群。 1、概述 HarmonyOS供了基于物理网络的数据流量统计能力&#xff0c;支持基于网卡/U…

贪心,CF 865B - Ordering Pizza

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 865B - Ordering Pizza 二、解题报告 1、思路分析 如果我们不考虑披萨数…

读懂MySQL事务隔离

什么是事务 事务就是一组原子性的SQL查询&#xff0c;或者说一个独立的工作单元。事务内的语句&#xff0c;要么全部执行成功&#xff0c;要么全部执行失败。 关于事务银行系统的应用是解释事务必要性的一个经典例子。 假设一个银行的数据库有两张表&#xff1a;支票表&#x…

MySql数据库---存储过程

存储过程概念 MySQL 5.0 版本开始支持存储过程。 简单的说&#xff0c;存储过程就是一组SQL语句集&#xff0c;功能强大&#xff0c;可以实现一些比较复杂的逻辑功能&#xff0c;类似于JAVA语言中的方法&#xff0c;类似Python中的函数&#xff1b; 存储过就是数据库 SQL 语言…

【数据结构】红黑树相关知识详细梳理

1. 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0c…

大数据行业应用实训室建设方案

摘要&#xff1a; 本文旨在探讨唯众针对当前大数据行业的人才需求&#xff0c;提出的《大数据行业应用实训室建设方案》。该方案旨在构建一个集理论教学、实践操作、技术创新与行业应用于一体的综合实训平台&#xff0c;以培养具备实战能力的大数据专业人才。 一、大数据课程体…

【AI知识点】机器学习中的常用优化算法(梯度下降、SGD、Adam等)

更多AI知识点总结见我的专栏&#xff1a;【AI知识点】 AI论文精读、项目和一些个人思考见我另一专栏&#xff1a;【AI修炼之路】 有什么问题、批评和建议都非常欢迎交流&#xff0c;三人行必有我师焉&#x1f601; 1. 什么是优化算法&#xff1f; 在机器学习中优化算法&#x…

决策树随机森林-笔记

决策树 1. 什么是决策树&#xff1f; 决策树是一种基于树结构的监督学习算法&#xff0c;适用于分类和回归任务。 根据数据集构建一棵树&#xff08;二叉树或多叉树&#xff09;。 先选哪个属性作为向下分裂的依据&#xff08;越接近根节点越关键&#xff09;&#xff1f;…

【动态规划-最长递增子序列(LIS)】【hard】力扣1671. 得到山形数组的最少删除次数

我们定义 arr 是 山形数组 当且仅当它满足&#xff1a; arr.length > 3 存在某个下标 i &#xff08;从 0 开始&#xff09; 满足 0 < i < arr.length - 1 且&#xff1a; arr[0] < arr[1] < … < arr[i - 1] < arr[i] arr[i] > arr[i 1] > … &g…

【hot100-java】二叉搜索树中第 K 小的元素

二叉树 二叉搜索树的中序遍历是递增序列。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode lef…

【C++】面向对象之继承

不要否定过去&#xff0c;也不要用过去牵扯未来。不是因为有希望才去努力&#xff0c;而是努力了&#xff0c;才能看到希望。&#x1f493;&#x1f493;&#x1f493; 目录 ✨说在前面 &#x1f34b;知识点一&#xff1a;继承的概念及定义 •&#x1f330;1.继承的概念 •&…

ECCV24高分论文:MVSplat稀疏视图下的高效的前馈三维重建模型

目录 一、概述 二、相关工作 1、稀疏视角场景重建 2、前馈NeRF 3、前馈3DGS 4、多视角立体视觉 三、MVSplat 1、多视角Transformer 一、概述 本文提出了一个MVSplat高效的前馈三维重建模型&#xff0c;可以从稀疏的多视图图像中预测3D高斯分布&#xff0c;并且相较于p…

三角形面积 python

题目&#xff1a; 计算三角形面积 代码&#xff1a; a int(input("请输入三角形的第一个边长&#xff1a;")) b int(input("请输入三角形的第二个边长&#xff1a;")) c int(input("请输入三角形的第三个边长&#xff1a;")) s (abc) / 2 #…

我谈均值平滑模板——给均值平滑模板上升理论高度

均值平滑&#xff08;Mean Smoothing&#xff09;&#xff0c;也称为盒状滤波&#xff08;Box Filter&#xff09;&#xff0c;通过计算一个像素及其周围像素的平均值来替换该像素的原始值&#xff0c;从而达到平滑图像的效果。 均值平滑通常使用一个模板&#xff08;或称为卷…

ISCC认证是什么?ISCC认证的申请流程有哪些注意事项?

ISCC认证&#xff0c;即国际可持续发展与碳认证&#xff08;International Sustainability & Carbon Certification&#xff09;&#xff0c;是一个全球通用的可持续发展认证体系。以下是对ISCC认证的详细介绍&#xff1a; 一、起源与背景 ISCC认证体系起源于德国&#x…

如何使用pymysql和psycopg2执行SQL语句

在Python中&#xff0c;pymysql和psycopg2是两个非常流行的库&#xff0c;用于与MySQL和PostgreSQL数据库进行交互。本文将详细介绍如何使用这两个库来执行SQL查询、插入、更新和删除操作。 1. 准备工作 首先&#xff0c;确保已经安装了pymysql和psycopg2库。如果尚未安装&a…

Linux驱动---光电开关、火焰传感器、人体红外传感器

文章目录 一、电路连接二、设备树三、驱动代码 一、电路连接 人体红外 – PF12 检测到人体时会产生一个上升沿 光电开关 – PE15 有遮挡物时会产生一个上升沿 火焰传感器 – PF5 有火焰时会产生一个上升沿 二、设备树 /{ //人体红外PF12human{ compatible "zyx,huma…