Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly x86 ASM使用*运算符处理eax_Assembly_Operators_Ida - Fatal编程技术网

Assembly x86 ASM使用*运算符处理eax

Assembly x86 ASM使用*运算符处理eax,assembly,operators,ida,Assembly,Operators,Ida,如何解释汇编中的*操作?它是否涉及某种数组操作 来自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,位移为常数 通常,当您看到这一点时

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

来自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\u 4-4
,其中
arg\u 4
是一个指针)很可能是一个由4字节整数和
eax
组成的数组的开始(它只是
arg\u 1
,其中
arg\u 1
是一个
大小将是数组中的偏移量。然而,它可以是任何东西。当使用优化编译程序时,编译器将使用这些结构来使用各种巧妙的技巧。

谢谢。考虑到它是一个数组操作,我如何利用操作符(仅限于静态分析)确定它到底发生了什么?它几乎肯定是这样做的:void f(int*arg_0,int arg_4){int edx=arg_0[arg_4-1];…}