首页
社区
课程
招聘
[求助]求解导出表函数个数的问题
发表于: 2017-6-19 18:24 2652

[求助]求解导出表函数个数的问题

2017-6-19 18:24
2652

导出表结构:

typedef struct _IMAGE_EXPORT_DIRECTORY {

    DWORD   Characteristics;

    DWORD   TimeDateStamp;

    WORD    MajorVersion;

    WORD    MinorVersion;

    DWORD   Name;

    DWORD   Base;

    DWORD   NumberOfFunctions;

    DWORD   NumberOfNames;

    DWORD   AddressOfFunctions;     // RVA from base of image

    DWORD   AddressOfNames;         // RVA from base of image

    DWORD   AddressOfNameOrdinals;  // RVA from base of image

} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;

我想用for循环遍历得出AddressOfFunctions表中所有函数的地址,但发现不知道表里有多少个函数,请教论坛的各位大神有什么方法能得出真实的导出函数个数?

以下是我已经测试过的方法:(如有错误请大家多多指教)

1.AddressOfNameOrdinals

经过测试,NumberOfFunctions 的值是根据AddressOfNameOrdinals的最高序号减去最低序号+1得出,所以当自定义序号的时候NumberOfFunctions的值就不再可靠。

2.NumberOfNames

因为函数的名词可以隐藏,所以NumberOfNames也不能作为导出函数的个数参考。

3.全零结构

听QQ群里的朋友说,遍历时候遇到全零结构意味AddressOfFunctions表结束了,经过测试发现最后一个函数地址后面并没有全零结构,后面依然有数据。



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
想知道loadPE是怎么遍历导出表的
2017-6-19 23:38
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我明白了,编译器还是按照NumberOfFunctions分配函数地址表的空间,假如设定的函数导出序号为2,4,6,7,系统分配的函数表大小为为:(7-2+1=6)*4(4字节),所以NumberOfFunctions为6,编译器会给AddressOfFunctions分配6个4字节的地址空间,其中2个是0,AddressOfNames也为6个4字节空间,其中2个也为0,不影响整个导出表。
2017-6-20 00:18
0
游客
登录 | 注册 方可回帖
返回