- x86汇编与逆向工程:软件破解与防护的艺术
- (美)斯蒂芬妮·多马斯 (美)克里斯托弗·多马斯
- 314字
- 2025-02-10 16:05:46
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指令中有所展示:
