码迷,mamicode.com
首页 > Windows程序 > 详细

WinPE基础知识之导入表

时间:2019-05-11 13:23:27      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:desc   win   pe文件   color   序号   import   data   style   for   

// 导入表 (结构体数组,以一个全零元素为结尾,每一个数组元素,代表一个PE文件导入信息)
// 导入表存储的是从其它PE文件导入过来的函数名、序号,加载到内存之后,还存储这些函数的地址
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
    union {
        DWORD   Characteristics;            // 0 for terminating null import descriptor
        DWORD   OriginalFirstThunk;         // (重要)指向一个结构体数组的相对虚拟地址(RVA),即INT
    } DUMMYUNIONNAME;
    DWORD   TimeDateStamp;                  // 时间戳
    DWORD   ForwarderChain;                 // 链表的前一个结构
    DWORD   Name;                           // (有用)指向链表库名字的指针(RVA)
    DWORD   FirstThunk;                     // (重要)指向一个结构体数组的相对虚拟地址(RVA),即IAT
} IMAGE_IMPORT_DESCRIPTOR;

// INT与IAT所指的数据类型(结构体数组 以全零为结尾)
// 在磁盘文件中他们存储的数据是相同的,在加载到内存后,加载器把相应PE文件的函数地址覆盖到这里
// 在磁盘文件中,起作用的只有后面两个成员
// 这个结构占据四个字节,假如最高位为1,那么序号导入起作用,假如最高位为0,那么是最后一个成员起作用
// 判断最高位是否为1使用系统提供的宏IMAGE_SNAP_BY_ORDINAL(),参数就是这个结构体
typedef struct _IMAGE_THUNK_DATA32 {
    union {
        DWORD ForwarderString;      // PBYTE 
        DWORD Function;             // 导入函数的地址,在加载到内存后,这里才起作用
        DWORD Ordinal;              // 假入是序号导入的用到这里
        DWORD AddressOfData;        // 假入是函数名导入的用到这里,它指向一个PIMAGE_IMPORT_BY_NAME结构体
    } u1;
} IMAGE_THUNK_DATA32;

// 上面结构体AddressOfData 指向的结构体
typedef struct _IMAGE_IMPORT_BY_NAME {
    WORD    Hint;    // 函数编号
    CHAR   Name[1];  // 表示函数名的字符串
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;

 

WinPE基础知识之导入表

标签:desc   win   pe文件   color   序号   import   data   style   for   

原文地址:https://www.cnblogs.com/duxie/p/10848262.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!