我试图“破解”游戏(红色警报3),我尝试制作一个程序,显示我的对手的单位列表。至于我首先需要找到一个指向我自己列表的(静态)指针,我可以在单个播放器上执行。
我注意到了这种行为:(通过查看add_unit代码更改了哪些地址):
这看起来像std :: vector行为。现在我无法找到向量的“基本”地址,还有一个更大的问题:我如何通过索引访问? std :: vector在哪里存储它对元素的地址?
额外信息:
使用MS Visual C ++ 2005编译的代码(来自我从程序集中读到的代码)(需要MSVCR80 dll才能播放)
这就是向量中的地址:
(突出显示的地址是作为第一个元素出现的地址 - 第一个单位构建)
这看起来不像我可以通过添加常量值来迭代?
每当添加新地址时,所有其他地址都完全有效且不会更改。
答案 0 :(得分:4)
vector
的典型(但绝不是强制性的)实现是连续三个单词:
struct TypicalVector
{
T * start;
T * end;
T * capacity;
};
元素访问是通过start[i]
完成的(这就是为什么在前面放置start
指针很重要,以避免不必要的偏移量计算),大小为end - start
,容量为capacity - start
。内存分配获得c * sizeof(T)
个字节,并将start
设置为已分配内存的地址,并将capacity
设置为start + c
。元素构造增加end
。