PE导出导出表

PE文件——导入表&导出表&函数覆盖 PE文件的基本结构图 第一个字段4D 5A被定义成字符“MZ”作为识别标志,后面的一些字段指明了入口地址、堆栈位置和重定位表位置等。 对于PE文件来说,有用的是最后的e_lfanew字段,这个字段指出了真正的PE文件头在文件中的位置,这个位置总是以8字节为单位对齐的。 判断是否是PE文件 1.使用Winhex工具,从文件头4D 5A(MZ)开始,跳转3C(即偏移3C); 2.跳转后可读取到数据为0000 00B0; 3.再跳转到地址0000 00B0; 4.若该地址数据为50 45(即PE)就为PE 阅读详情

// export_test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
int export_jixi(unsigned long pmodule ,char *function)
{
 if(pmodule == 0)
  return -1;
 if(IMAGE_DOS_SIGNATURE != *(unsigned short*)pmodule)
  return -1;
 unsigned long peheader=pmodule + *(unsigned long*)(pmodule + 0x3C);
 if(IMAGE_NT_SIGNATURE != *(unsigned long*)peheader)
  return -1;
 unsigned long export=*(unsigned long*)(peheader + 0x78) + pmodule;
 if(export == pmodule)
  return -1;
 unsigned long base=0;
 unsigned long numoffunction=0;
 unsigned long numofname=0;
 unsigned long *addrofname=NULL;
 unsigned long *addroffunction=NULL;
 unsigned short *addroforgname=NULL;
 //printf("base:%d name:%s\r\n" ,*(unsigned long*)(export+0x10) ,*(unsigned long*)(export+0x0C)+pmodule);
 numoffunction = *(unsigned long*)(export + 0x14);
 numofname = *(unsigned long*)(export + 0x18);
 //printf("numoffunction :%d ,numofname :%d \r\n" ,numoffunction ,numofname);
 addrofname = (unsigned long*)(*(unsigned long*)(export + 0x20) + pmodule);
 addroforgname = (unsigned short*)(*(unsigned long*)(export + 0x24) + pmodule);
 addroffunction = (unsigned long*)(*(unsigned long*)(export + 0x1C) + pmodule);
 int index=0;
 for (int i=0 ;i<numofname ;i++)
 {
  if(!strncmp(function ,(char*)(addrofname[i]+pmodule) ,strlen(function)))
  {
    index =base + addroforgname[i];
    return addroffunction[index] + pmodule;
  }
 }
 return 0;
 
}
int main(int argc, char* argv[])
{
 HMODULE hlib=LoadLibrary("kernel32");
 printf("%x\r\n" ,export_jixi((unsigned long)hlib ,"GetProcAddress"));
 return 0;
}


《Windows PE》5.1 导出表 该值也是一个指针,与AddressOfNames是一一对应关系,所不同的是,AddressOfNames指向的是字符串的指针数组,而AddressOfNameOrdinals则指向了该函数在AddressOfFunctions中的索引值。●导出函数序号表(Export Function Ordinal Table)是PE文件中导出表的一部分,用于映射导出函数的序号和地址。DLL中的第一个导出函数并不是从0开始的,某导出函数的编号等于从AddressOfFunctions开始的顺序号加上这个值。 阅读详情

相关推荐

PE导出表分析

导出表大多存在于DLL中,目的就是用来导出其他exe运行的函数。不管exe或者DLL的本质都是PE文件。 DLLIMPORT关键字可以用来修饰某个函数或者时变量就会被导出。 1.3 测试代码 1.4 结果 3.导出表的位置 导出表位于扩展PE头的DIRECTORY DataDirectory[10]里,该数组有10个成员,第一个就是导出表,即DIRECTORY DataDirectory[0]。关于PE文件结构前面提到很多,这里不再赘述,直接用StudyPE+工具找

istream1的博客 563

PE文件格式学习(三):导出表(Export)

1.回顾 上篇文章中介绍过,可选头中的数据目录表是一个大小为0x10的数组,导出表就是这个数组中的第一个元素。 我们再回顾下数据目录表的结构体: struct _IMAGE_DATA_DIRECTORY { &amp;amp;nbsp; &amp;amp;nbsp; DWORD VirtualAddress; &amp;amp;nbsp; &amp;amp;nbsp; DWORD Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DA...

tutucoo 730

滴水逆向——PE导出表

Ⅰ.知识点: 1.如何定位导出表: 数据目录项的第一个结构,就是导出表. typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; ...

sunr. 1809

11.PE文件之导出表(IMAGE_EXPORT_DIRECTORY)

目录 导出表定位以及解析(手动) 代码定位导出表并打印其数据 通过函数名查找导出函数地址 通过导出函数序号查找函数地址 移动导出表 PE中的导出表通常存在于动态链接库文件里.有些EXE也会存在导出表.导出表的主要作用是将PE中存在的函数引出到外部,以便其他人可以使用这些函数,实现代码的重用.导出表的存在可以让程序的开发者很容易清楚PE中到底有多少可以使用的函数. Windows装载器在进行PE装载时,将与进程相关的DLL加载到对应虚拟地址空间.会根据导入表中登记的与该动态链接库相关的由INT指

kernelhack 6843

PE文件学习(二)数据目录表之导出表与导入表

数据目录表是PE中比较重要的一个组成部分,其结构如下: IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 //导出表 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1

SanSiro1的博客 4935

PE之移动导出表

1、移动各种表的目的 (1)在程序启动时,系统会根据导入导出表等进行初始化工作。为了保护程序,一般会对exe程序的二进制进行加密等工作,但是一旦将这些表也进行了加密,那么系统在初始化的时候没办法找到这些表,也无法启动程序。 (2)在对程序加密之前,需要对一些关键的表进行移动后,再对原来的数据进行加密,这样才不能破坏原来的程序。 (3)学会移动各种表,是对程序加密/破解的基础。 2、如何移动导出表 上一篇文章,提到了如何对导出表进行解析,导出表的结构如图下。 导出表的位置是在可选PE头的第一项,如图,我们可

windows小菜鸡的博客 786

PE-导出表

导出表 导出表描述了导出表所在PE文件向其他程序提供的可供调用的函数的情况。 一般情况下,PE中的导出表存在于动态链接库文件里。导出表的主要作用是将PE中存在的函数引出到外部,以便其他人可以使用这些函数,实现代码的重用。 3.1导出表作用 代码重用机制提供了重用代码的动态链接库,它会向调用者说明库里的哪些函数是可以被别人使用的,这些用来说明的信息便组成了导出表。 通常情况下,导出表存在于动态链接库文件里。 导出表的存在可以让程序的开发者很容易清楚PE中到底有多少可以使用的函数,但如果没有函数使用说明,开发者

megaparsec 1173

【C++源码】PE文件结构中导出表的解析

【C++源码】PE文件结构中导出表的解析 控制台版本

ProgrammingLearner的博客 3693

PE文件(七)导入表

解析此图:该PE文件以.def的方式自定义序号导出函数,定义了序号13、14、16、17、19的导出函数,那么Base的值应为13,那么序号为13的函数相对相对下标就是0,序号14的导出函数相对下标就是1,序号为15的导出函数虽然没有,但是会把位置空出来,定义地址值为NULL,即0x00000000,序号16的导出函数相对下标就是3…导出函数名称表RVA我们在硬盘数据找该表地址时要先转成FOA,这个地址指向的表记录了导出函数的名称字符串RVA首地址,而不是导出函数名称。//导出函数名称表RVA *

2301_78838647的博客 2179

VS Code + ESP-IDF:离线环境配置与示例工程编译全指南

本文详细介绍了在VS Code中离线配置ESP-IDF开发环境的完整流程。针对国内开发者常遇到的网络问题,指南提供了从Python环境准备、获取离线安装包、运行安装器到VS Code插件配置与示例工程编译的全套解决方案,确保环境搭建稳定、可控且高效。

weixin_28842367的博客 403

STM32H743必要外围电路分析

写在前面:这篇博客是我第一次绘制STM32最小系统板的过程记录。 2020-1-11 BOOT STM32采用ARM内核,和ARM处理器一样,都有专门的boot脚决定单片机从何处启动。 在官方数据手册的第105页,我们可以看到 系统复位后,在SYSTICK的第四个上升沿锁存BOOT引脚的值,复位后,BOOT引脚可以由用户自由配置而不会影响系统正常运行。 BOOT引脚决定了自举存储器地址,当BO...

Cui_Hongwei的博客 1万+

PE文件:导出表

导出表提供了一些函数供调用者使用。一般来说DLL提供了一些函数可以供外部使用,这些函数通过导出表被调用。 一般来说,dll都有导出表,exe都没有导出表,但是也有情况,dll没有导出表,exe有导出表。

weixin_43742894的博客 998

别再手动调参了!用Optuna+PyTorch搞定Transformer时序预测超参数(附完整代码)

本文详细介绍了如何利用Optuna和PyTorch实现Transformer时序预测模型的自动化超参数调优。通过贝叶斯优化技术,显著提升单变量时序预测的效率和准确性,并附有完整代码实现。文章涵盖模型架构设计、数据预处理、Optuna调参实战及生产环境部署建议,为开发者提供一站式解决方案。

weixin_33704234的博客 576

PE结构&导出表

导出表的作用 代码重用机制提供了重用代码的动态链接库,它会向调用者说明库里的哪些函数是可以被别人使用的,这些用来说明的信息便组成了导出表。 通常情况下,导出表存在于动态链接库文件里。但不能简单地认为EXE中没有导出表,例如WinWord.exe文件里就有;也不能简单地认为所有的DLL中都有导出表,例如一些专门存放资源位文件的DLL里就没有导出表。 它的存在可以让程序开发者很容易清楚PE中到底有多少可以使用的函数,但如果没有函数使用说明,开发着只能通过函数名称,反汇编代码或者运行结果对函数的调用方式,函数的功

寻梦&之璐 3711

STM32F103+LAN9252实战:从站代码迁移中的5个硬件坑与解决方案

本文分享了将EtherCAT从站代码从STM32F767迁移至STM32F103平台时,搭配LAN9252遇到的五个典型硬件问题及解决方案。核心挑战包括时钟源不匹配、FSMC时序配置、中断映射错误、片选资源不足以及Flash烧录异常。文章通过实战经验,强调了硬件差异对代码迁移的关键影响,并提供了具体的调试思路与配置方法。

p5l2m9n4o6q的博客 697

如何在huggingface上申请下载使用llama2/3模型

huggingface-cli download --resume-download 模型名称 --local-dir 存放模型的位置 --local-dir-use-symlinks False --resume-download --token token序列号xxxxxxx。登录huggingface,在模型详情页面上,找到这个表单,填写内容,提交申请。需要使用梯子,country填写梯子的位置吧(比如美国)等待一小时左右,会有邮件通知。

a61022706的博客 1万+

PE文件之导出表

代码重用机制提供了重用代码的动态链接库,它会向调用者说明库里的哪些函数是可以被别人使用的,这些用来说明的信息便组成了导出表。EXE文件中很少有导出表,大部分的DLL文件中都有导出表。导出表的存在可以让程序的开发者很容易清楚PE中到底有多少可以使用的函数,但如果没有函数使用说明,开发者也只能通过名称、反汇编代码或者运行结果对函数的调用方式、函数的功能等进行猜测。Windows装载器在进行PE装载时,会将导入表中登记的所有DLL一并装入,然后根据DLL的导出表中对导入函数的描述修正导入表的IAT值。

静下心来,做好每一件事 818

YOLOv8改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合

可扩展的高效物体检测BiFPN(加权双向特征金字塔网络)

Limiiiing的博客 1081

PE文件结构详解(三)PE导出表

上篇文章 PE文件结构详解(二)可执行文件头 的结尾出现了一个大数组,这个数组中的每一项都是一个特定的结构,这次来看看第一项:导出表。

evil.eagle的专栏 2万+

Rockchip eMMC寿命监控:SMART信息读取与预防性维护

擦写计数坏块数量温度使用时间。

小灰灰的博客 762

vue3 - element-plus表格组件el-table实现鼠标拖曳排序功能,vue3 Table表格拖拽排序,表格每行使用鼠标拖动进行排序功能,表格拖拽排序实现(详细示例代码,一键复制开箱即用

vue3,elementPlus,el-table,typescript,表格组件,Table表格,表格拖动排序,表格拖曳排序,鼠标拖拽表格进行排序功能,elementplus表格如何实现拖动每行进行排序操作,表格拖动改变顺序,鼠标拖曳,表格内的数据项拖拽排序,vue3如何实现element-Plus表格组件进行表格内的数据项拖拽排序,列表拖拽排序效果,实现table动态拖拽,鼠标拖着排序,vue3 element Plus 表格拖曳拖动拖拽 排序,el-table拖拽排序实现,表格内容拖拽重新排序,树形表

✅ 精选推荐文章 1万+

PE_导出表

导出表导出表概念导出表的作用导出表数据结构(IMAGE_EXPORT_DIRECTORY)IMAGE_EXPORT_DIRECTORY.nNameIMAGE_EXPORT_DIRECTORY.NumberOfFunctionsIMAGE_EXPORT_DIRECTORY.NumberOfNamesIMAGE_EXPORT_DIRECTORY.AddressOfFunctionsIMAGE_EXPORT_DIRECTORY.nBaseIMAGE_EXPORT_DIRECTORY.AddressOfNamesI

个人笔记 1297

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【第34节】windows原理:PE文件的导出表和导入表

(1)导出行为和导出表用途:PE文件能把自身的函数、变量或者类,提供给其他PE文件使用,这种行为就叫导出。导出表专门用来存放这些导出项目的信息。当一个PE文件要调用其他PE文件里的导出函数(变量、类)时,依靠导出表就能迅速找到它们在文件里的位置。一般来说,这些被导出的函数、变量、类,也叫做符号(Symbol)。(2)导出项序号的特点:每一个被导出的函数(变量、类),都有一个独一无二的序号。

攻城狮7号的博客 1264

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【PE结构】4.导出表

一、前言 二、PE整体结构 三、DOS头 四、NT头 五、区段头 六、导出表 七、导入表 八、资源表 九、其他表 1.概念 导出 是指PE文件导出的供其他PE文件使用的函数、变量、或者类的行为。 符号 这些导出的函数、变量、类一般称为符号。 导出表 是存储导出的这些符号的表。通过导出表,能够定位这些符号。 2.导出表定位 前面提到的 ...

SMOne 923

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

PE文件分析-导出表和导入表

导出表 DESC: 记录本模块导出函数的相关信息, 结构如图所示。 RVA: IMAGE_DATA_DIRECTORY[0].VirtualAddress。 导出函数有两种导出方式: (1) 序号导出。直接在导出函数地址表通过序号得到函数的 RVA。 (2) 名称导出。先在导出函数名称表中找到该函数位置, 再在导出函数名称序号表对应位置找到该导出函数的序号, 最后在导出函数地址表通过序号得到函数的 RVA。 Name DESC : 本模块名称字符串的 RVA。 NumberOfFunctio

m0_48995611的博客 1825

PE知识复习之PE的导出表

一丶简介  在说明PE导出表之前.我们要理解.一个PE可执行程序.是由一个文件组成的吗. 答案: 不是.是由很多PE文件组成.DLL也是PE文件.如果我们PE文件运行.那么就需要依赖DLL.系统DLL就是Kerner32.dll user32.dll等等.这些都是PE文件. 什么是导出表:     导出表就是当前的PE文件提供了那些函数.给别人用. 举个例子: PE文件相当于一个饭店.那么...

weixin_30510153的博客 128
上一篇: 模仿系统PE重定位实现
下一篇: Winsock I/O 模型详解
codinglf
博客等级 码龄16年 237粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值