IT狗工作室

x86汇编基础-内存寻址模型

2019-12-13  本文已影响0人  铁甲万能狗

到目前位置,我们了解的到内存寻址最简单的方法就是移位寻址,但对于分析C/C++一些复杂的代码片段更底层操作原理,仅靠前文那些汇编知识是不够的。

通过上一篇的学习,我们《x86汇编基础-move指令和基本寻址》,我们已经知道在

移位寻址的一般形式“D(Rb,Ri,K)”等价于“RAM[Reg[Rb]+K*Reg[Ri]+D]”其中:

移位寻址的特殊形式

内存寻址计算示例:

在x64中有一条指令叫lea的指令,当然x86的版本是leal,指令的一般形式如下,该指令的操作数可以是上面提过的表达式形式

例如:leal (%exx,%ecx,4), %eax 就表示%eax=%edx+4*%ecx,

为什么是k只能是这些数字?你可以从C角度去考虑,char是1字节的整数是基本数据类型里面最小的数据长度,double/long int是8字节是目前基本数据类型中支持最大的数据长度。

算数运算符

在反编译的C函数的上下文中,经常会碰到lea指令和以下算术操作符
令一起出现,因此我们回顾一下

下表仅列出x86下的算术运算符指令
这里着重所以下imull指令,实质上执行的就是位移运算的指令,因此乘法运算只需位移运算即可。
上一篇 下一篇

猜你喜欢

热点阅读