C++ 这是哪种std容器行为?
我正在尝试“破解”一个使用Visual Studio 2005编译的游戏(红色警报3,封闭源代码…)(需要MSVCR80.dll来玩) 我试着制作一个程序,显示我对手的单位列表。至于这一点,我首先需要找到一个指向我自己列表的(静态)指针,我可以在singleplayer上这样做 我有一些问题,因为我不知道我的静态指针是否真的指向我想要的东西 我注意到了这种行为:(通过查看add_单元代码更改了哪些地址):C++ 这是哪种std容器行为?,c++,stl,containers,std,stdvector,C++,Stl,Containers,Std,Stdvector,我正在尝试“破解”一个使用Visual Studio 2005编译的游戏(红色警报3,封闭源代码…)(需要MSVCR80.dll来玩) 我试着制作一个程序,显示我对手的单位列表。至于这一点,我首先需要找到一个指向我自己列表的(静态)指针,我可以在singleplayer上这样做 我有一些问题,因为我不知道我的静态指针是否真的指向我想要的东西 我注意到了这种行为:(通过查看add_单元代码更改了哪些地址): 如果一个单元尚未构建,则为其创建一个新地址(随机?),并将该值设置为1(该类型的单元数量
- 如果一个单元尚未构建,则为其创建一个新地址(随机?),并将该值设置为1(该类型的单元数量),但之前添加的单元的所有其他地址保持不变,因此,如果类型a的单元具有地址0x12345678,说明有多少类型a的单元,然后它不会改变,并且在整个游戏过程中保持可访问性
编辑/更新: 到目前为止,我已经能够重建这个结构:
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;
};
还有其他单位地址周围的一些东西,我需要了解它是如何工作的。然后我可以高效地创建所有内容。似乎位于升序地址中。这看起来像是通过分配器将内容添加到任何容器中。我会猜测和侵入式链接列表中的对象位于某种分配器上
我希望这有帮助。添加到向量并不一定意味着地址无效。此外,为了避免重新分配,我猜大小是预先固定的(IIRC限制为可以拥有的单元数,因此大小为200的数组就足够了)这些地址似乎分布不均匀,因此使用vector_start+(offset*元素)将不起作用:(这就是为什么我认为这不是一个std::vector,也可能是一个链表?它们有“任意”地址。(我认为它们在开始时是连续分配的,但当插入/删除元素时,它们将不再是连续的…)你不创建地址。你创建的对象存储在内存中的某个地址。我想,这些地址代表了对象的起始位置,其中包含了有关该单元的信息。我认为它们与存储这些对象所用的容器类型无关。嗯,经过进一步研究,我认为这是一个高级的l墨迹列表,现在我需要弄清楚它的结构,呵呵