zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    nginx.conf中配置laravel框架站点
    centos6.4下安装php7+nginx+mariadb环境
    Windows Terminal 安装和运行
    微软 WSL 重装操作系统
    Pulumi 如何在 Windows 环境中设置
    Ubuntu 20.04 安装 JDK
    代码的 Lint 是什么意思
    CentOS 8 手动安装 Go 1.16 版本
    Raspberry Pi 安装 go 后提示错误 Exec format error
    系统管理--查看网卡、内存等
  • 原文地址:https://www.cnblogs.com/duxie/p/10848262.html
Copyright © 2011-2022 走看看