在 C++ 中,当我看到像 ((dword *) v16 + 6) 这样的位置时,这是否意味着从 v16 移动 6 个字节并作为双字返回,或者从 v16 移动 6 个双字?
我正在尝试阅读一些伪反编译代码并映射内存结构,但由于这是两个非常不同的位置,我想填补我对内存结构知识的空白。
为了希望有助于理解其含义,我将其分成几部分
(dword *)v16
将 v16
的值视为内存中的地址,并将其转换为指向 dword
的指针。
((dword *) v16 + 6)
假设 (dword *)v16
给出的地址指向(至少)七个 dwords
数组的第一个元素,并给出一个指针,其值是第 7 个元素的地址(因为 C++ 中的数组索引)从零开始,数组中的第一个元素的索引为零)。
所以,不,添加
6
并不会移动 6 个字节。它移动 6 个 dword
(dword
不是 C++ 中的标准类型,但在使用/定义为类型时,通常由多个字节表示)。
这与 C++ 中指针算术的工作方式一致(在向指针添加整数值时会考虑所指向的大小 - 在本例中为
dword
)。