在类- c++中存储内存内容

Store memory content in class - C++

本文关键字:内存 存储 c++ 在类      更新时间:2023-10-16

我正试图为应用程序编写一个插件,我被卡住了,我需要从内存中读取内容并将其存储在一个类中。我得到了以下信息:

UserInfo = 0x9F9648 
UserInfoSize = 0x560

这是存储内容的位置,我已经给了下面的类来存储它:

class CUserInfo
{
public:
    __int32 clientNum; //0x0000  
    __int32 Valid; //0x0004  
    char unknown8[4]; //0x0008
    char Name[16]; //0x000C  
    ... and some other properties
};

问题是我不知道如何从地址位置获取内容并将其存储在类实例中。

有谁知道怎么做吗?

您可以使用reinterpret_cast<>将整型地址转换为指向任何所需类型的指针,然后对该指针解引用。

例如:

CUserInfo user_info;
user_info.clientNum = *(reinterpret_cast<__int32*>(0x9F9648));

当然这是危险的做法。当您尝试访问任意内存地址时,应该注意访问冲突和对齐错误。

如果UserInfo和CUserInfo是二进制兼容的(两者都有相同的内存布局的字段),那么你可以这样做:

CUserInfo* pui = new CUserInfo;
*pui = *reinterpret_cast<CUserInfo*>(UserInfo);

你可以这样做:

char* ptr = 0x9F9648;
CUserInfo obj;
obj.clientNum = *((__int32*)ptr);
ptr+=4; // int32 = 4 bytes
// and so on...

对于数组,必须在循环中读取每个字节

for(int i=0; i<16; ++i)
{
  obj.Name[i] = *ptr;
  ++ptr;
}
// at this point ptr is updated. No need to increment it

reinterpret_cast也可以工作,除非您在类中有指针字段。如果你有,我认为你必须按照上面的方法做。