2

如何解释*汇编中的操作?它是否涉及某种数组操作?

来自 IDA 的示例片段,涉及程序参数的使用:

mov     eax, [ebp+arg_0]
mov     ecx, [ebp+arg_4]
mov     edx, [ecx+eax*4-4]
4

1 回答 1

3

这是一个乘法。

在 x86 中,您可以在单个指令中使用以下表达式访问内存。

*(base + offset*multiplier + displacement)

其中基数和偏移量是寄存器,乘数是 1、2、4 或 8,位移是常数。

通常,当您看到这个时,您正在查看一个数组操作,例如ecx - 4(它只是arg_4 - 4arg_4指针在哪里)可能是 4 字节整数数组的开始,并且eax(这只是arg_1arg_1a在哪里size_t)会是数组的偏移量。然而,它绝对可以是任何东西。当使用优化编译程序时,编译器将使用这些结构来提取各种巧妙的技巧。

于 2012-08-31T14:18:29.480 回答