2

我正在尝试“破解”游戏(红色警报 3),我尝试制作一个程序来显示我的对手的单位列表。至于那我首先需要找到一个指向我自己的列表的(静态)指针,我可以在单人游戏中做到这一点。

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

  • 如果尚未构建单位,请为其创建一个新地址(随机?)并将值设置为 1(该类型的单位数量)
  • 当单位已经在游戏中建造过一次时,将单位类型的原始地址加 1

这在我看来就像 std::vector 行为。现在我很难找到向量的“基”地址,还有一个更大的问题:如何按索引访问?std::vector 在哪里存储它的元素地址?

额外信息:

代码(从我从程序集中读到的)用 MS Visual C++ 2005 编译(播放需要 MSVCR80 dll)

这是向量中的地址的样子:

在此处输入图像描述

(突出显示的地址是作为第一个元素出现的地址 - 第一个单元构建)

这看起来不像我可以通过添加一个常量值来迭代?

每当添加新地址时,所有其他地址都完全有效并且不会更改。

4

1 回答 1

4

一个典型的(虽然不是强制性的)实现vector是有三个连续的词:

struct TypicalVector
{
    T * start;
    T * end;
    T * capacity;
};

元素访问是通过start[i](这就是为什么将start指针放在前面很重要,以避免不必要的偏移计算),大小是end - start,容量是capacity - start。内存分配获取c * sizeof(T)字节并设置start为已分配内存的地址并设置capacitystart + c. 元素构造增量end

于 2013-03-29T10:46:54.880 回答