*(_DWORD *)是什么意思

逆向工程 艾达 反编译
2021-07-06 08:07:51

我使用 IDA Pro 反汇编了一些代码并获得了伪代码。它显示了如下所示的内容。

for ( i = 0; i < 6; ++i )
{
  v7 = (int)&val_253;                         
  for ( k = 1; k < key[i]; ++k )
    v7 = *(_DWORD *)(v7 + 8);
  v4[i] = v7;
}

我无法理解正在发生的事情v7 = *(_DWORD *)(v7 + 8);执行此行后,v7 的值从0xC. 我无法理解它是如何发生的。我认为价值应该从0x8.

我认为*(_DWORD *)应该返回一个值。但相反,它返回另一个指针。这是怎么发生的(内存的两个值,0xc远离&val_2530x8远离&val_253都是零)。

1个回答
v7 = *(_DWORD *)(v7 + 8);

方法 :

v7 = *(v7 + 8)

或者在组装中

MOV v7, DWORD PTR [v7 + 0x8]

(这只是为了理解目的,很可能它不像上面的样本)

v7被分配了位于 address 的值v7+8*sizeof(DWORD)例如,如果v7 = 0xabcd0123v7 + 8*sizeof(DWORD) = 0xabcd0143位于 的任何内容0xabcd0143都将分配给v7