Java教程

WindowsPE 导入表

本文主要是介绍WindowsPE 导入表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

导入表在就是在.rdate 节表当然不绝对

导入表在 数据目录 第2个 导入函数在第13个  

 

 

 可以看到rdata 表 起始2000位置  导入表在2538   iat 在2000

这里的rva 地址都要转换为foa 地址  就是  当前rva-初始rva+foa偏移 就是文件物理偏移位置

通过数据找到导入表位置 就是IMAGE_IMPORT_DESCRIPTOR  结构

 

typedef struct _IMAGE_IMPORT_DESCRIPTOR {
    union {
        DWORD   Characteristics;            // 0 for terminating null import descriptor
        DWORD   OriginalFirstThunk;         // RVA to original unbound IAT (PIMAGE_THUNK_DATA)
    } DUMMYUNIONNAME;
    DWORD   TimeDateStamp;                  // 0 if not bound,
                                            // -1 if bound, and real date\time stamp
                                            //     in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND)
                                            // O.W. date/time stamp of DLL bound to (Old BIND)

    DWORD   ForwarderChain;                 // -1 if no forwarders
    DWORD   Name;
    DWORD   FirstThunk;                     // RVA to IAT (if bound this IAT has actual addresses)
} IMAGE_IMPORT_DESCRIPTOR;
typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR;

这里5个值依次对应

 

 

 

 

 OriginalFirstThunk ,指向IMAGE_THUNK_DATA  他是一个连续的

typedef struct _IMAGE_THUNK_DATA32 {
    union {
        DWORD ForwarderString;      // PBYTE 
        DWORD Function;             // PDWORD
        DWORD Ordinal;
        DWORD AddressOfData;        // PIMAGE_IMPORT_BY_NAME
    } u1;
} IMAGE_THUNK_DATA32;
typedef IMAGE_THUNK_DATA32 * PIMAGE_THUNK_DATA32;

 

 这是值指向 

typedef struct _IMAGE_IMPORT_BY_NAME {
    WORD    Hint;
    CHAR   Name[1];
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;

 

 

 

 FirstThunk 也是同样指向 

_IMAGE_IMPORT_BY_NAME 

 

所以他是一个双桥结构

 

 最后指向一样 不过 FirstThunk  在载入内存时会被替换成真正的函数地址 载入od 查看402000地址

 

 

 

这篇关于WindowsPE 导入表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!