x86 ASM使用*运算符处理eax

时间:2012-08-31 13:36:24

标签: assembly operators ida

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

IDA的示例代码段涉及使用程序参数:

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

1 个答案:

答案 0 :(得分:3)

这是一个乘法。

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

*(base + offset*multiplier + displacement)

其中base和offset是寄存器,乘数是1,2,4或8,位移是常数。

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