-3

我有一个指向使用 GetProcAddress 从 DLL 加载的某个对象的指针:

CSomeClass* pSomeClass;
pSomeClass = (CSomeClass*)GetProcAddress(someDLLinstance, "SomeUnknownName");

我无法修改上面的代码,但我需要"SomeUnknownName"在它超出范围后获取字符串。我只能访问pSomeClass指针。有什么方便的方法可以从指针中获取导入对象的名称吗?现在我只是从 DLL 中转储所有导出名称,然后使用GetProcAddress()它们中的每一个来获取指向所有导出对象/函数的所有指针,然后与pSomeClass这些指针进行比较,但对于解决方案来说似乎很慢。

4

1 回答 1

1

如果你真的需要这样做,你可以使用 DbgHelp 函数来完成这项工作。具体来说,您将SymFromAddr在这种情况下查看。

你先打电话SymInitialize,然后你可以打电话SymFromAddr。你给它一个 SYMBOL_INFO 结构的地址。您填写地址和最大符号长度,它会返回名称。

完成后,您至少应该调用SymCleanup让符号管理器库关闭,释放它所持有的任何内存等。大概这会/将在您的进程结束时发生,但在何时调用它会更干净你完成了。

如果您有调试信息,那么几乎所有符号都会成功。然而,即使没有调试信息,它也会(至少通常)成功导出符号。

于 2015-05-08T21:43:23.573 回答