2012-06-22 49 views

回答

2

一个类没有偏移量 - 它的方法有偏移量。如果PE文件是一个DLL,并且导出了一个类,则可以从导出的函数表中获取其方法的偏移量。名字将被改变。 mangling方案是编译器和版本特定的。

您可以使用DUMPBIN工具(Visual Studio或Platform SDK提供)来观察导出表。 IIRC,它甚至可以为你取消名字。如果您想以编程方式执行此操作,请使用ImageHlp API中的函数 - ImageLoad()等等。

有没有好办法获得非出口类方法的偏移量。

此外,偏移可以在MAP文件或调试符号或PDB文件中找到。如果它是第三方产品,那么最有可能的是,这些产品将无法供您使用。

编辑re:Microsoft DLLs。 Microsoft通过Microsoft Symbol Server为他们的许多文件(Win32和.NET)提供调试符号。 Visual Studio自2005年以来可以在加载DLL时自动拖动这些符号。

+0

当你说没有好的方法,那么有一种方法,但它不容易吗?我已经得到了exe和dll的导出函数。 – xybrek

+0

有没有不好的方法:)除非明确保留(例如在调试符号或MAP文件中),否则C++类名在编译和链接后会丢失。即使你反汇编了这个文件,你也可以看到函数的开始和结束位置,但是你永远不会知道该函数的编译时间名称是什么。 C++不是一种反映的语言。 –

+0

顺便说一句,我得到了类偏移的想法是从这里的答案:http://stackoverflow.com/questions/11126547/reading-win32-variables,从你说的这意味着从这个建议的解决方案是错误的? – xybrek