【发布时间】:2015-05-08 18:06:34
【问题描述】:
我有一个指向使用 GetProcAddress 从 DLL 加载的某个对象的指针:
CSomeClass* pSomeClass;
pSomeClass = (CSomeClass*)GetProcAddress(someDLLinstance, "SomeUnknownName");
我无法修改上面的代码,但是我需要在它超出范围后获取"SomeUnknownName"字符串。我只能访问pSomeClass 指针。有什么方便的方法可以从指针中获取导入对象的名称吗?现在我只是从 DLL 中转储所有导出名称,然后在它们每个上使用 GetProcAddress() 以获取指向所有导出对象/函数的所有指针,然后将 pSomeClass 与这些指针进行比较,但这似乎很慢一个解决方案。
【问题讨论】:
-
通过
"SomeUnknownName"查找实际上是什么意思?? -
GetProcAddress不返回对象。它返回一个过程地址。pSomeClass没有关于SomeUnknownName是什么的信息;它只是一个指针。一旦字符串SomeUnknownName超出范围,就无法将其取回,除非完全按照您的操作 - 对每个导出的名称调用GetProcAddress,直到找到匹配的地址。 -
GetProcAddress 不返回对象本身,但它可能返回对象指针以及函数指针。我只是假设它会查找一些表来找到给定名称的指针。我想要的是,找到给定指针的名称,反之亦然。
-
对象没有名字。你的问题仍然模糊不清,
-
出口有名字。考虑 DLL 中的这些行:
extern "C" __declspec(dllexport) CSomeClass firstInstance; extern "C" __declspec(dllexport) CSomeClass secondInstance;然后,我可以获得指向任一对象的指针:pSomeClass = (CSomeClass*)GetProcAddress(someDLLinstance, "firstInstance");
标签: c++ pointers winapi dll getprocaddress