如何解释汇编中的*
操作?它是否涉及某种数组操作?
来自 IDA 的示例片段,涉及程序参数的使用:
mov eax, [ebp+arg_0]
mov ecx, [ebp+arg_4]
mov edx, [ecx+eax*4-4]
最佳答案
这是一个乘法。
在 x86 中,您可以在一条指令中使用以下表达式来访问内存。
*(base + offset*multiplier + displacement)
其中基址和偏移量是寄存器,乘数是 1、2、4 或 8,位移是常数。
通常,当您看到此内容时,您正在查看数组操作,例如 ecx - 4
(即 arg_4 - 4
,其中 arg_4
是一个指针)可能是 4 字节整数数组的开头和 eax
(即 arg_1
,其中 arg_1
> 是 size_t
) 将是数组中的偏移量。然而,它绝对可以是任何东西。当程序通过优化进行编译时,编译器将使用这些构造来发挥各种巧妙的技巧。
关于assembly - x86 ASM 使用 * 运算符处理 eax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12216497/