这个std容器的行为是什么?

时间:2013-03-29 11:25:35

标签: c++ stl containers std stdvector

我正在努力" hack"使用Visual Studio 2005(MSVCR80.dll需要播放)编译的游戏(Red Alert 3,封闭源代码..),

我尝试制作一个显示对手单位列表的程序。至于那个我首先需要找到一个指向我自己列表的(静态)指针,我可以在单人游戏上做。

我有一些问题,因为我无法弄清楚我的静态指针是否真正指向我想要的东西。

我注意到了这种行为:(通过查看add_unit代码更改了哪些地址):

  • 如果尚未构建单位,请为其创建新地址(随机?)并将值设置为1(该类型的单位数量),但所有其他地址对于先前添加的单位保持不变,所以如果A类单位的地址为0x12345678,告知有多少单位A类型,那么它就不会改变,并且在整个游戏过程中都可以访问。

所以其他地址无效或其他什么?

这是添加的地址的示例,突出显示的地址是添加的第一个地址:

可以使用哪种类型的std :: container? 它肯定不是一个向量,因为在插入新元素时,向量会使所有其他地址无效吗?


编辑/更新: 至于现在,我已经能够重建这个结构:

struct UnitsInfo
{
    DWORD * someptr_1_to_other_UnitsInfo_struct;
    DWORD * someptr_2_to_other_UnitsInfo_struct;
    DWORD * someptr_3_to_other_UnitsInfo_struct;
    int unkown_1;
    unsigned int Type;
    unsigned int Amount;
};

并且some_ptr的东西指向所有其他单元地址,我需要找出它是如何工作的。然后我可以有效地创造一切。

1 个答案:

答案 0 :(得分:1)

似乎是在升序地址。这看起来像是通过分配器添加到任何容器中的东西。我猜测和侵入链接列表中的对象在某种分配器上。

我希望这会有所帮助。