PE加载器如何构建IAT表

2025-04-24 08:35:40

1、首先,当你在windows上运行一个exe程序,比如记事本、office、qq,这都需要PE加载过程,这个过程首先PE加载器会将整个exe文件映射到虚拟内存,然后PE加载器读取MS-DOS头(IMAGE_DOS_HEADER),根据MS_DOS头中的e_lfanew值和程序镜像基址

PE加载器如何构建IAT表

2、以记事本程序为例,可以很清楚的看到这点。

PE加载器如何构建IAT表

3、接下来PE加载器根据PE头的信息,获取IMAGE_OPTIONAL_HEADER头的虚拟内存地址。

PE加载器如何构建IAT表

4、找到IMAGE_OPTIONAL_HEADER头的位置后,会根据IMAGE_OPTIONAL_HEADER的IMAGE_DATE_DIRECTORY目录来找到输入表的虚拟内存地址。

PE加载器如何构建IAT表

5、为了更直观,可以用LORDPE打开上面的记事本程序,点击目录,如下图所示的第二张图,就对应于上面说的IMAGE_DATE_DIRECTORY的结构数组。

PE加载器如何构建IAT表
PE加载器如何构建IAT表

6、然后再弹出的窗口中注意输入表,点击”..."按钮,会看到具体的输入表内容,PE加载器在这里就可以获取PE文件所需要调用的DLL库文件,以及调用了相应的DLL库中的哪些API函数。

PE加载器如何构建IAT表

7、上图中的输入表中的每一稍僚敉视个DLL库文件,都对应于一个IMAGE_IMPORT_DESCRIPTOR的结构。这个结构中OriginalFirstThunk指向输入名称表(简称INT)的地记醋弭床址,FirstThunk包含指向输入地址表(简称IAT)的地址。地址所指向的都是IMAGE_IMPORT_BY_NAME的结构,这样便找到了要加载的api函数。关系如下图所示。

PE加载器如何构建IAT表

8、PE加载器会首先搜索OriginalFirstThunk所指向的INT,根据IMAGE_IMPORT_BY_NAME中的函数名称或者是Hint号,直接加载相应库函数中的api函数,然后就可以获取虚拟内存中真正的库函数地址,PE加载器将这个地址存入到FirstThunk所指向的IMAGE_IMPORT_BY_NAME的结构数组中,这样就构建成功了IAT。

PE加载器如何构建IAT表
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢