【发布时间】:2014-04-05 07:56:15
【问题描述】:
我正在学习 x86 汇编,在 lea 指令方面遇到了一些问题。
0x080486f7 <+21>: lea eax,[esp+0x18]
谁能解释这一行发生了什么?据我了解,它取 [esp+0x18] 处的值并将该值解释为地址,并将地址的 int 值放入 eax。
【问题讨论】:
我正在学习 x86 汇编,在 lea 指令方面遇到了一些问题。
0x080486f7 <+21>: lea eax,[esp+0x18]
谁能解释这一行发生了什么?据我了解,它取 [esp+0x18] 处的值并将该值解释为地址,并将地址的 int 值放入 eax。
【问题讨论】:
它将esp + 0x18 存储在eax 中。换句话说,它只是加法。 LEA 经常用于执行基本的算术运算。
【讨论】:
基本上
mov eax, [esp+0x18]
意思
mov eax, esp
add eax, 0x18
mov eax, [eax]
在 C 中看起来像
eax = *(unsigned int*)(esp + 0x18)
同时
lea eax, [esp+0x18]
意思
mov eax, esp
add eax, 0x18
在 C 中看起来像
eax = esp + 0x18
【讨论】: