从闭源库中检索静态指针,不由公共接口公开

Retrieving a static pointer from a closed-source library, not exposed by the public interface

本文关键字:接口 指针 闭源 检索 静态      更新时间:2023-10-16

我正在使用一个我无法更改的代码的dll。我有一个公共接口,它公开了我正在使用的类Surface

dll 的代码包含类似于以下内容的内容:

static Texture  staticTexture[MAXTEXTURECOUNT];
static Texture *staticTextureCurrent = NULL;
static Texture *staticGetTextureById(int id);
class Texture
{
public:
    int     _id;
...
    void   *_dib;
...
};
void Surface::DrawSetTexture(int id)
{
    Texture *texture = staticGetTextureById(id);
    staticTextureCurrent = texture;
}

Texture 类不会以任何方式由公共头文件公开。我需要访问纹理::_dib指向的内存。理想情况下,我希望能够从任何地方呼叫staticGetTextureById,但记忆是我所追求的。但是,我或多或少知道纹理类的样子。

我已经尝试过在调用 DrawSetTexture 后通过摆弄 cpu 寄存器来恢复纹理指针,但这根本没有奏效。

任何想法如何检索此指针?无论多么笨拙,只要它不会崩溃并且工作可靠,我都会对任何解决方案感到高兴。我需要一种更快的方法来吸引那个记忆,然后用我得到的东西。

根据我的理解,类在设置方式方面与 C 中的结构类似。所以,也许通过做ptrToClassObject+offset,它可能只是工作。有一种方法可以获取类成员的偏移量,我只是不知道它是如何设置的。