// 导出的东西包括函数(变量、类)地址,序号,函数(变量、类)名
typedef struct _IMAGE_EXPORT_DIRECTORY {
DWORD Characteristics; // (没用) 保留值,恒为0
DWORD TimeDateStamp; // (没用) 和文件头中的时间一样的
WORD MajorVersion; // (没用) 主版本号
WORD MinorVersion; // (没用) 次版本号
DWORD Name; // (有用) 本PE文件的名字,也就是谁导出的这些函数(变量,类)
DWORD Base; // (有用) 序号基数
DWORD NumberOfFunctions; // (重要) 函数数量
DWORD NumberOfNames; // (重要) 函数名称数量
DWORD AddressOfFunctions; // (重要) 函数地址表的相对虚拟地址 // RVA from base of image
DWORD AddressOfNames; // (重要) 函数名称表的相对虚拟地址
DWORD AddressOfNameOrdinals; // (重要) 序号的相对虚拟地址
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
A:导出表应该被安排在.edata中,不过这个段一般都会合并到.rdata中。
B:有一个序号基数,通过序号表得到的序号再加上这个序号基数才是真正的函数序号。
C:导出的函数地址表、序号表、函数名称表的关系。
(1)序号不是按顺序排列的;
(2)序号与函数名是一一对应的,两个表中相同位置的元素相对应。这也说明了结构体中为什么没有序号的数量,因为序号的数量和函数名的数量是一样的
(3)序号会有中断,比如可能会没有1,有2 ,没有5,有6,但是这并不代表缺失的这个序号没有所对应的函数地址
(4)函数个数会比函数名个数多,多出来的这些函数,可能是用序号导出的函数,也可能是一个无效函数,地址填充0;
(5)序号表元素的值,对应着函数地址表的位置,那一个位置中的函数地址,是这个序号所对应的函数名的函数地址,由此,三个表联系起来;
(6)函数地址表中元素,有地址值,但是序号表中没有序号与之对应,说明这是一个序号导出元素,这个序号成为虚序号没有函数名,它的序号就是它自己在函数地址表中的位置;(当然这个位置加上序号基数,才是它真正的序号)
(7)函数地址表中元素,填充为0,说明这是一个无效的函数,也不会有序号与函数名与之对应

举例

函数表中有5、7两个位置是无效函数;2,3,4,6,8位置是函数名导出的(要注意函数名的位置与地址表中地址的位置并不相同);1,9是序号导出的函数,序号就是它本身的位置。

WinPE基础知识之导出表的更多相关文章

  1. WinPE基础知识之代码解析

    void CMyPE::OnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 // 打开一个文件夹选择对话框 CFileDialog dlg(TRUE); dlg. ...

  2. WinPE基础知识之头部

    1.DOS头 // DOS MZ头,大小为64个字节 typedef struct _IMAGE_DOS_HEADER { WORD e_magic; // EXE标志,“MZ”(有用,解析时作为是否 ...

  3. WinPE基础知识之重定位表

    typedef struct _IMAGE_BASE_RELOCATION { DWORD VirtualAddress; // (重要)需要重定位的位置,这是一个RVA DWORD SizeOfBl ...

  4. WinPE基础知识之导入表

    // 导入表 (结构体数组,以一个全零元素为结尾,每一个数组元素,代表一个PE文件导入信息) // 导入表存储的是从其它PE文件导入过来的函数名.序号,加载到内存之后,还存储这些函数的地址 typed ...

  5. Oracl基础知识(一)

    概述 Oracle功能繁多,接触Oracle不深,将接触到的基础知识整理下来,以便不时之需.整理的内容主要有Expdp指令实现数据库备份,Impdp指令实现数据库还原,以及用户.表空间的定义.整理的数 ...

  6. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  7. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  8. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  9. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

随机推荐

  1. JAVA 基础编程练习题39 【程序 39 分数累加】

    39 [程序 39 分数累加] 题目:编写一个函数,输入 n 为偶数时,调用函数求 1/2+1/4+...+1/n,当输入 n 为奇数时,调用函数 1/1+1/3+...+1/n package cs ...

  2. CentOS查看每个进程的网络流量

    所需工具nethogs 安装:yum install -y nethogs 使用:nethogs eth0 sudo nethogs -s //按接收流量大小排序 如上图,PID一列就是进程的PID, ...

  3. EasyNetQ使用(四)【Request与Response,Send与Receive】

    EasyNetQ也支持Request/Response这种方式的消息模式.这种方式很容易在client/Server应用中执行,客户端发送一个请求到服务器,服务器然后处理请求后返回一个响应.和传统的R ...

  4. Linux 系统中用Systemd 管理系统服务

    Systemd  命令详解: https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-syste ...

  5. 【极简版】OpenGL 超级宝典(第五版)环境配置 VS2010

    事先声明:该教程仅适用于VS2010环境下超级宝典第五版的配置 第一步:下载示例代码和环境包: 链接:https://pan.baidu.com/s/1llRRQ8ymBgMGuXp5M50pJw 提 ...

  6. 剑指offer 67. 字符串转换为整数(Leetcode 8. String to Integer (atoi))

    题目:剑指offer 67题 需要考虑的情况:空指针.nullptr.空字符串"".正负号.数值溢出.在写代码的时候对这些特殊的输入都定义好合理的输出.可以定义一个全局布尔型变量g ...

  7. docker中如何部署mysql

    这篇博文讲很详细了. 链接

  8. 配置zabbix监控windows,cmd运行报错cannot connect to Service Manager: [0x00000005]

    错误原因: cmd运行没有管理员权限 解决: 找到cmd.exe的位置C:\Windows\System32,选中--右键--使用管理员身份运行 再通过cmd进入到zabbix_agentd文件夹进行 ...

  9. ubuntu 右上角网络图标不见了

    sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service ...

  10. Fabric docker-compose volumes配置解析

    chaincode: container_name: chaincode image: hyperledger/fabric-ccenv tty: true environment: - GOPATH ...