WinPE基础知识之导入表
作者:互联网
// 导入表 (结构体数组,以一个全零元素为结尾,每一个数组元素,代表一个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,基础知识,导入,IMPORT,DWORD,IMAGE,结构 来源: https://www.cnblogs.com/duxie/p/10848262.html