1

我正在使用无法更改代码的 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 类。我需要访问 Texture::_dib 指向的内存。理想情况下,我希望能够staticGetTextureById从任何地方打电话,但记忆是我所追求的。然而,我或多或少地知道 Texture 类的外观。

我已经尝试在调用 DrawSetTexture 后通过摆弄 cpu 寄存器来查看是否可以恢复纹理指针,但这根本没有成功。

任何想法如何检索此指针?我会很高兴任何解决方案,无论它多么老套,只要它不会崩溃并且工作可靠。我需要一种更快的方法来吸引我的记忆。

4

1 回答 1

0

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

于 2013-09-07T16:38:14.493 回答