汇编中数组的索引?

逆向工程 拆卸 部件
2021-06-18 10:35:53

在下图中,我想提到的那一行是:

mov [esp+eax*4+0Ch], edx

eax是数组中的索引。但是,要访问的数组的地址在哪里?

这行代码是什么意思?( 0Ch)

asm 行的完整上下文

1个回答

通常,在遍历数组时,我们可以找到以下几行汇编代码:

mov [base_address_of_array + array_index * size_of_an_item_in_array], edx

在您的情况下,我的猜测是该数组在堆栈上(这就是为什么您将其esp作为数组基地址的一部分找到。然后,您还有一个偏移量为espis 0Ch(十进制为 12)。所以, 数组位于esp + 0Ch. 然后,eax是索引,4是数组中项目的大小(可能是 4 个字节的整数)。

如果我们查看整个 CFG,我会将其翻译回 C,如下所示:

int array[4];

for (int i = 0; i < 4; ++i)
  array[i] = i;

注意:我认为 CFG 中的蓝色弧线会回到loc_401381.