首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

导入表在资料与内存的分析

2013-01-26 
导入表在文件与内存的分析typedef struct _IMAGE_IMPORT_DESCRIPTOR {union {DWORDCharacteristics// 0 f

导入表在文件与内存的分析
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
    union {
        DWORD   Characteristics;            // 0 for terminating null import descriptor
        DWORD   OriginalFirstThunk;         // RVA to original unbound IAT (PIMAGE_THUNK_DATA)
    };
    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;


ImportTableAddr(RVA: 2010 | FA : 0610)


|-----------------------------------------|
| OriginalFirstThunk | TimeDateStamp | ForwarderChain | Name           | FirstThunk    |
|-----------------------------------------|
| 4c 20 00 00             | 00 00 00 00         | 00 00 00 00         | 6a 20 00 00 | 00 20 00 00  |
| 54 20 00 00             | 00 00 00 00         | 00 00 00 00         | 86 20 00 00 | 08 20 00 00  |
|-----------------------------------------|
| 00 00 06 4c             | 00 00 00 00         | 00 00 00 00         | 00 00 06 6a | 00 00 06 00  |
| 00 00 06 54            | 00 00 00 00         | 00 00 00 00          | 00 00 06 86 | 00 00 06 08  |
|-----------------------------------------|


FA:导入表在文件中的存放形式
[
    OriginalFirstThunk: 5c 20 00 00 (FA:00 00 06 5C | 80 00 ExitProcess)
    Name: kernel32.dll
    FirstThunk: 5c 20 00 00 (FA:00 00 06 5C | 80 00 ExitProcess)


    OriginalFirstThunk: 78 20 00 00  (FA:00 00 06 78 | 9D 01 MessageBoxA)
    Name: user32.dll
    FirstThunk: 78 20 00 00 (FA:00 00 06 78 | 9D 01 MessageBoxA)
]


VA(ImageBase:00 40 00 00)导入表在内存中的存放形式
[
    OriginalFirstThunk: 5C 20 40 00 (VA:00 40 20 5c | 80 00 ExitProcess)
    Name: kernel32.dll (00 40 20 6a)
    FirstThunk: 0a d2 8a 7c


   (0a d2 81 7c)  OriginalFirstThunk: 78 20 00 00 (VA:00 40 20 78 | 9d 01 MessageBoxA)
    Name: user32.dll (00 40 20 68)
    FirstThunk: ea 07 d5 77
]


在文件中时FirstThunk和OriginalFirstThunk指向相同的位置。
在内存中时FristThunk和OriginalFirstThunk指向不同的位置,FirstThunk中保存了API函数的地址。

热点排行