看雪论坛
发新帖

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

站撸肉鸡 4天前 168

导出表结构:

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表结束了,经过测试发现最后一个函数地址后面并没有全零结构,后面依然有数据。


本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (2)
站撸肉鸡 4天前
2
想知道loadPE是怎么遍历导出表的
站撸肉鸡 4天前
3
我明白了,编译器还是按照NumberOfFunctions分配函数地址表的空间,假如设定的函数导出序号为2,4,6,7,系统分配的函数表大小为为:(7-2+1=6)*4(4字节),所以NumberOfFunctions为6,编译器会给AddressOfFunctions分配6个4字节的地址空间,其中2个是0,AddressOfNames也为6个4字节空间,其中2个也为0,不影响整个导出表。
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 知道创宇带宽支持 | 微信公众号:ikanxue
Time: 0.012, SQL: 9 / 京ICP备10040895号-17