【澳门娱乐6165】字节为二个单位的数组成分

作者:金沙总站6155
typedef struct _IMAGE_EXPORT_DIRECTORY {
    DWORD   Characteristics;    // 未使用,总为0 

    DWORD   TimeDateStamp;      // 文件创建时间戳
    WORD    MajorVersion;       // 未使用,总为0 

    WORD    MinorVersion;       // 未使用,总为0
    DWORD   Name;               // 指向一个代表此 DLL名字的 ASCII字符串的 RVA
    DWORD   Base;               // 函数的起始序号
    DWORD   NumberOfFunctions;  // 导出函数的总数

    DWORD   NumberOfNames;      // 以名称方式导出的函数的总数

    DWORD   AddressOfFunctions;     // 指向输出函数地址的RVA
    DWORD   AddressOfNames;         // 指向输出函数名字的RVA
    DWORD   AddressOfNameOrdinals;  // 指向输出函数序号的RVA

} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;

AddressOfFunctions 所指向内容是以 4 字节为七个单位的数组成分,每一种成分代表函数入口

AddressOfNames 所指向内容是以 4 字节为叁个单位的数组成分,种种元素代表二个针对字符串的 福睿斯VA

澳门娱乐6165,AddressOfNamesOrdinals 所指向内容是以 2 字节为叁个单位的数组成分,每种成分代表对应名字在 AddressOfFunctions 中的序号数。

AddressOfNames 和 AddressOfNamesOrdinals 的多寡分明是一样的,不是雷同那么就出错了。

重要要调整两种检索函数入口地址的办法:

A. 从序号查找函数入口地址

  1. 定位到PE 文件头
  2. 从PE 文件头中的 IMAGE_OPTIONAL_HEADECR-V32 结构中取出数据目录表,并从第多个数据目录中收获导出表的RubiconVA
  3. 从导出表的 Base 字段得到开首序号
    4. 将需求研究的导出序号减去开头序号Base,获得函数在进口地址表中的索引,检验索引值是不是高于导出表的 NumberOfFunctions 字段的值,假若超越后面一个的话,表明输入的序号是没用的
  4. 用这一个索引值在 AddressOfFunctions 字段指向的导出函数入口地址表中抽取相应的连串,那便是函数入口地址的中华VVA 值,当函数棉被服装入内部存储器的时候,那些LANDVA 值加上模块实际装入的集散地址,就得到了函数真正的进口地址

B. 从函数名称查找入口地址

自己想通的地点,记录下来:用函数名来搜寻的话,Base 的值今后从不此外意义

  1. 第风流倜傥拿到导出表的地点
  2. 从导出表的 NumberOfNames 字段得到已命名函数的总的数量,并以那个数字作为循环的次数来布局八个周而复始,从 AddressOfNames 字段指向获得的函数名称地址表的首先项开首,在循环上校每黄金年代项定义的函数名与要探寻的函数名绝比较,若无其他三个函数名是契合的,表示文件中从不点名名称的函数。
    3. 万生龙活虎某后生可畏项定义的函数名与要物色的函数名切合,那么记下那些函数名在字符串地址表中的索引值,然后在AddressOfNamesOrdinals 指向的数组中以同等的索引值抽取数组项的值,大家这边假诺那几个值是 x
  3. 最终,以 x 的值作为索引值在 AddressOfFunctions  字段指向的函数入口地址表中获取 EnclaveVA 。此 福睿斯VA 正是函数的输入地址。

附上航海用教室片:

澳门娱乐6165 1

本文由澳门娱乐6165发布,转载请注明来源

关键词: