1、PE文件输入表
定义与作用:输入表(Import Table)是Windows可执行文件(PE文件)中的一个重要组成部分,用于描述该程序所依赖的外部DLL函数,它记录了所有被导入的函数和变量的信息,以便在程序运行时能够正确地调用这些外部函数。
位置:输入表位于PE文件头的IMAGE_OPTIONAL_HEADER结构中的DataDirectory数据目录表的第二个成员指向的位置。
2、输入表的结构
IMAGE_IMPORT_DESCRIPTOR数组:每个被PE文件链接进来的DLL文件都对应一个IMAGE_IMPORT_DESCRIPTOR(简称IID)数组结构,这个数组没有明确指出有多少个项,但以一个全为NULL的IID作为结束标志。
IMAGE_IMPORT_DESCRIPTOR结构:包含OriginalFirstThunk、TimeDateStamp、ForwarderChain、Name和FirstThunk等字段,其中OriginalFirstThunk和FirstThunk是关键,它们指向first thunk数组的虚地址,通过loader用函数虚地址初始化thunk。
3、first thunk数组
结构:first thunk数组由IMAGE_THUNK_DATA结构组成,该结构是一个指针大小的联合类型,可以表示函数的序号或指向IMAGE_IMPORT_BY_NAME结构的RVA。
作用:first thunk数组包含了导入函数的信息,包括Hint和Function name的地址,当IMAGE_THUNK_DATA的最高位为1时,表示函数以序号方式输入;当最高位为0时,表示函数以字符串类型的函数名方式输入。
4、IMAGE_IMPORT_BY_NAME结构
定义:IMAGE_IMPORT_BY_NAME结构包含Hint和Name两个字段,其中Hint字段是可选的,有些编译器总是将它设置为0;Name字段定义了导入函数的名称字符串。
作用:IMAGE_IMPORT_BY_NAME结构用于存储输入函数的相关信息,如函数名等。
5、输入地址表(IAT)
定义:输入地址表(IAT)是由两个并行的指针数组同时指向IMAGE_IMPORT_BY_NAME结构,第一个数组(由OriginalFirstThunk所指向)是单独的一项,不能被改写;第二个数组(由FirstThunk所指向)事实上是由PE装载器重写的。
作用:PE装载器首先搜索OriginalFirstThunk,找到之后加载程序迭代搜索数组中的每个指针,找到每个IMAGE_IMPORT_BY_NAME结构所指向的输入函数的地址,然后加载器用函数真正入口地址来替代由FirstThunk数组中的一个入口,当我们的PE文件装载内存后准备执行时,刚刚的图就会转化为下图:输入地址表(IAT)。
PE输入表是PE文件中用于描述外部DLL函数依赖关系的重要部分,它通过IMAGE_IMPORT_DESCRIPTOR数组、first thunk数组、IMAGE_IMPORT_BY_NAME结构和输入地址表(IAT)等多个组件共同构成了一个完整的输入表结构,了解PE输入表的结构和原理有助于深入理解PE文件的动态链接过程以及程序的运行机制。
以上就是关于“pe输入表_表输入”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/66840.html