首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用*运算符处理eax的x86 ASM

使用*运算符处理eax的x86 ASM
EN

Stack Overflow用户
提问于 2012-08-31 21:36:24
回答 1查看 161关注 0票数 2

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

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

代码语言:javascript
运行
复制
mov     eax, [ebp+arg_0]
mov     ecx, [ebp+arg_4]
mov     edx, [ecx+eax*4-4]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-31 22:18:29

这是一个乘法运算。

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

代码语言:javascript
运行
复制
*(base + offset*multiplier + displacement)

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

通常,当您看到这种情况时,您看到的是一个数组操作,例如ecx - 4 (它就是arg_4 - 4,其中arg_4是一个指针)很可能是一个4字节整数数组的开始,而eax (它就是arg_1,其中arg_1是一个size_t)将是数组中的偏移量。然而,它可以是任何东西。当使用优化编译程序时,编译器将使用这些构造来使用各种巧妙的技巧。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12216497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档