![x86汇编与逆向工程:软件破解与防护的艺术](https://wfqqreader-1252317822.image.myqcloud.com/cover/730/53287730/b_53287730.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.6.2 间接寻址
间接寻址使用寄存器来指定地址。所用寄存器包括16位通用寄存器(如[ax])和32位通用寄存器(如[eax])。但是,8位通用寄存器(如al、bh等)和特殊寄存器不能用于寻址。
示例:指针
许多编程语言都使用指针(pointer)的概念,有些是直接使用,有些则在幕后运行。直接使用和操作指针是C/C++数据类型进行间接寻址的一个例子。C程序中可能会有这样的代码:int x=1; int*p=&x;。在这里,指针p被设定为指向x。即使你对C语言不熟悉,也不用担心,你只需知道p保存的是x在内存中的地址。
然而,p的值可能会改变以指向其他事物,因此它的目标地址并不固定。要在汇编中访问p指示的值,首先要将p加载到一个寄存器中,然后用这个寄存器来查找我们想要的值。这一过程在以下的x86指令中有所展示:
![](https://epubservercos.yuewen.com/2FAC88/31751360804058606/epubprivate/OEBPS/Images/42_01.jpg?sign=1739579385-Rb49Lozne9RxHfeFrV4d6PTJ7DdaU1uw-0-267d03ab59d57c8a5b72bac2692d5078)