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;
  • 相关阅读:
    nfs-client-provisioner 利用NFS动态提供Kubernetes后端存储卷
    docker-compose简易编写和模板命令
    shell脚本自动过滤尝试多次连接ip并添加到系统黑名单
    Centos 升级glibc 亲测好用
    centos安装Jenkins报错
    centos8 安装docker启动失败
    cenots7 rpm 包升级ssh
    python备份文件(简易)
    Docker 容器基本操作(基础)
    Docker 环境下如何配置你的镜像(基础)
  • 原文地址:https://www.cnblogs.com/duxie/p/10848262.html
Copyright © 2011-2022 走看看