我熟悉在游戏中查找玩家基指针以及其他值,以及查找偏移量等。我过去曾将其应用到我自己的一些代码中。
但是这种做法是否适用于任何类的实例?
这是一个示例程序。
using namespace std;
class A {
public:
int i = 0;
virtual void doThing() {
i++;
cout << i << endl;
}
};
int main()
{
A* a = new A();
while (1)
{
a->doThing();
Sleep(6000);
}
system("pause");
return 0;
}
我使用作弊引擎i在A::doThing. 然后我使用该选项来查找写入该地址的内容。从那里我发现似乎是一个偏移量,做了一个指针扫描,发现它example.exe+0x001A2EC是一个静态指针,并且其持有的值i在 offset 处0x4。
会example.exe+0x001A2EC被认为是指向类实例的指针A吗?
我想要做的基本上是复制目标程序指向 class 实例的指针A,然后在我自己的代码中访问它的 V-Table,该代码将被注入到进程中。
这就是我试图实现这一目标的方式。
DWORD Base = (DWORD)GetModuleHandle(0);
A* a = (A*)(Base + 0x1A2EC);
void** vtable = *(void***)a;
如果我的理解或方法有问题,请指出我做错了什么,或者建议一些其他方式,我可以获得指针的副本。