zoukankan      html  css  js  c++  java
  • WinPE基础知识之导出表

    // 导出的东西包括函数(变量、类)地址,序号,函数(变量、类)名
    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是序号导出的函数,序号就是它本身的位置。

  • 相关阅读:
    [办公自动化]Excel表格求和始终显示#VALUE!
    Excel中如何对IP地址排序(linux 中呢?用sort)
    勇士通关——记多年前的面试
    [听听音乐]路,李知蹊
    [办公自动化]PPT演示时加个动画倒计时
    [网络安全]burp 转换ascii编码
    [学习笔记]掌控安全的课程学习笔记:20191228
    [生活随笔]起死回生的九阳破壁机
    [IT新应用]如何拯救死机的苹果手机(iPhone X)
    八月份课堂--Python爬虫(Spider)基础
  • 原文地址:https://www.cnblogs.com/duxie/p/10847862.html
Copyright © 2011-2022 走看看