【发布时间】:2013-03-29 10:36:37
【问题描述】:
我正在尝试“破解”游戏(红色警报 3),我尝试制作一个程序来显示我的对手的单位列表。至于这一点,我首先需要找到一个指向我自己的列表的(静态)指针,我可以在单人游戏中做到这一点。
我注意到了这种行为:(通过查看 add_unit 代码更改了哪些地址):
- 如果尚未构建单元,请为其创建一个新地址(随机?)并将值设置为 1(该类型的单元数量)
- 当单位已经在游戏中建造过一次时,将单位类型的原始地址加 1
这在我看来就像 std::vector 行为。现在我很难找到向量的“基”地址,还有一个更大的问题:如何按索引访问? std::vector 将它的元素地址存储在哪里?
额外信息:
代码是(从我从程序集中读到的)用 MS Visual C++ 2005 编译的(播放需要 MSVCR80 dll)
向量中的地址如下所示:
(突出显示的地址是作为第一个元素出现的地址 - 第一个单元构建)
这看起来我不能通过添加一个常量值来迭代?
每当添加新地址时,所有其他地址都完全有效且不会更改。
【问题讨论】:
-
完全依赖于编译器厂商提供的实现。该标准仅描述了接口以及您对容器的要求,而不是实现细节。
-
伙计们……问题不必由语言标准定义才有效。他正在询问一个公开可用的编译程序,该程序可供所有人使用。这是一个完全有效的问题。
-
代码是(从我从程序集中读到的)用 MS Visual C++ 2008 编译的(播放需要 MSVCR80 dll)
-
标准还规定向量将其对象存储在连续内存中。所以如果你有基地址,你可以得到任何元素的地址作为基地址的偏移量。
-
链接
MSVCRT80.DLL等表明该应用程序是使用 Visual Studio 2005(也称为“MSVC8”)构建的。 Visual Studio 2008(也称为“MSVC9”)将使用MSVCRT90.DLL等。
标签: c++ stl containers std stdvector