PE导出表

时间:2016-09-14 12:58:23

标签: c++ debugging ms-access portable-executable pe-exports

我查看了特定DLL的导出表,并且我在表中看到了一些奇怪的条目,所以我试图在pecoff规范中找到这个问题的答案,并且没有找到任何,我希望有人可能有一个。

我在某个DLL(Qt5Core.dll)上运行了一个dumpbin,发现exports表中的条目是不是函数 - >有些条目的地址指向.data部分和.rdata部分...... 例如:

const QAbstractState ::`vftable' 67366E0C 1470 QMetaObject const QEventTransition :: staticMetaObject 673C15A8 6160 QCoreApplication * QCoreApplication :: self 6746180C 5504

好像有些c ++变量,我想知道为什么它们出现在export表中? 谢谢!

2 个答案:

答案 0 :(得分:1)

导出条目不一定是函数。 您可以查看我的stackoverflow线程:PE - Distinguish data from function export

结论很清楚,数据也可以从PE文件中导出。 没有完美的方法来区分这两者,但是一些启发式和运行时操作可以帮助您解决这个问题。 有关详细信息,请参阅我上面的帖子(也请阅读评论)。

答案 1 :(得分:1)

<强> NumberOfFunctions 此模块导出的函数/符号总数。

<强> NumberOfNames 按名称导出的函数/符号数。该值不是模块中所有函数/符号的数量。对于该数字,您需要检查NumberOfFunctions。此值可以为0.在这种情况下,模块可以仅按顺序导出。如果在第一种情况下没有要导出的功能/符号,则数据目录中导出表的RVA将为0.

从上面我们得出结论,序数表仅列出实际具有名称的导出数。

来源:http://win32assembly.programminghorizon.com/pe-tut7.html