コードを変更できない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 レジスタをいじって、テクスチャ ポインタを回復できるかどうかを確認しようとしましたが、まったくうまくいきませんでした。
このポインターを取得する方法はありますか? クラッシュせず、ある程度確実に機能する限り、どんなにハックであっても、どんな解決策でもうれしいです。与えられたものよりも、その記憶に引き寄せるより速い方法が必要です。