C++将内存转换为数据结构

标签 c++ memory data-structures reverse-engineering

在调试应用程序时,我在内存中发现一个我 100% 确定只包含 4 个字符串的结构。虽然我不太确定如何将它转换为数据结构,以便我可以使用结构指针地址来访问值。例如,这里是数据结构在内存中的样子(例如,假设它始终位于内存地址 0x123456)enter image description here

数据结构由4个独立的字符串组成

string 1 = ad
string 2 = dgdhkkkkkkhkk
string 3 = ggghhjk
string 4 = dgcfoh

我试过创建一个像这样的数据结构

struct reversedConnectionDat_t
{
    char * data1;
    char * data2;
    char * data3;
    char * data4;
}

这就是我尝试访问数据的方式

reversedConnectionDat_t * storeDat = (reversedConnectionDat_t*)0x123456;
print(storeDat->data3);

但是好像不行。我没有正确地从内存中读取字符串吗?

(哦,字符串有时会与我在上面发布的示例代码中发布的内容发生变化,即有时字符串 1 的长度为 7,而字符串 3 的长度仅为 2,等等...)

最佳答案

你有一个指向指针结构的指针,所以即使你将结构指向正确的内存地址,你在结构中仍然有未初始化的指针。您需要为他们提供实际内存。我会尝试像这样设置你的结构......

struct reversedConnectionDat_t
{
    char data1 [3];
    char data2 [50];
    char data3 [50];
    char data4 [50];
}

顺便说一句,我没有计算空格。我只是猜到了,但你明白了。

关于C++将内存转换为数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45060536/

相关文章:

c++ - 如何向 arm-gnueabi 工具链添加新的 header ?

c++ - C++ 指针不能改变它们的原始值

algorithm - 堆排序的目的是什么?

java - ConcurrentSkipListMap 是否对键修改进行排序? (以及其他自动排序结构)

c++ - 比较两个人脸opencv

c - 我的链表库不工作

linux - scanmem (Linux) 与 CheatEngine (Win)

c++ - 可以手动泄漏内存吗?

java - 需要一个高效的Map或Set,在添加和删除时不会产生任何垃圾

c++ - 是否在返回之前销毁参数?