大家好,我可能很难解释这一点,但我会尽力而为。
我正在创建一个将注入程序的 DLL。为了从 DLL 中访问我想要的数据,我将数据映射到一个“基地址”,其中是指向另一个地址的指针。从那里我必须将该地址增加 0x34 才能访问我的数据。我想我可以使用结构来发挥我的优势,但它似乎不起作用。问题是我似乎无法弄清楚如何增加第二个地址以获得指向我的数据的最终指针。
我有的是这个
typedef unsigned char BYTE;
typedef struct
{
DWORD Some_Int;
//big struct of DWORDS simulating what is in the applicaiton.
//shortened for posting
}DATA;
typedef struct
{
BYTE Unknown[0x34];
DATA *p_data;
}VARBASE;
DWORD WINAPI function()
{
VARBASE *Stats = (VARBASE*)0x00BBC9CC;
char lol[1000];
sprintf(lol, "stats pointer: %p | DATA pointer: %p", Stats, Stats->p_data);
SomeFunction(lol); //wrapper for MessageBoxA()
return NULL;
}
Stats 指向正确的地址,但我无法读取 0x34 字节的数据(或增加指针 0x34)以获取指向我的数据集的第二个指针。当我使用这个当前代码时,p_data 被设置为 0000155A 或类似的东西,当它应该在 0A0* * * 范围内时,这会在读取时导致段错误。我知道我的数学是正确的,因为我已经在像 CheatEngine 这样的内存映射器中打开了应用程序,我可以专门添加基指针 -> 地址 + 0x34 -> 我从 CheatEngine 内部的数据。
有没有更简单的方法来解决这个问题,而不是使用基础结构来指向我的数据?基本上它的指针->指针+0x34->数据,我面临的问题是我不能增加第二个指针并设置它,所以我可以访问我的数据。