在类- c++中存储内存内容
Store memory content in class - C++
我正试图为应用程序编写一个插件,我被卡住了,我需要从内存中读取内容并将其存储在一个类中。我得到了以下信息:
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
也可以工作,除非您在类中有指针字段。如果你有,我认为你必须按照上面的方法做。
相关文章:
- 将字符串存储在c++中的稳定内存中
- 类型总是使用其大小存储在内存中吗
- 使用无符号字符数组有效存储内存
- 具有内存顺序的原子负载存储
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 可用存储空间会消耗更多剩余内存吗?
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 将数据存储在内存中以供以后访问
- 英特尔将指令存储在重叠的内存区域
- 关于矢量内存存储
- 如何使一个线程中的内存存储"promptly"在其他线程中可见?
- c++中用于常量数据的内存存储
- 内存存储可以在 OoOE 处理器中真正重新排序吗?
- 动态分配的内存存储说明
- 在 std::vector 中存储指针会破坏连续内存存储的优势
- #定义指令内存存储
- 跨语言的内存存储