我正在学习x86汇编,并且在lea指令上遇到了一些麻烦。
0x080486f7 <+21>: lea eax,[esp+0x18]
Run Code Online (Sandbox Code Playgroud)
谁能解释这行发生了什么?以我的理解,它将值取为[esp + 0x18]并将其解释为地址,然后将整数地址的值放入eax。
基本上
mov eax, [esp+0x18]
Run Code Online (Sandbox Code Playgroud)
手段
mov eax, esp
add eax, 0x18
mov eax, [eax]
Run Code Online (Sandbox Code Playgroud)
在C中看起来像
eax = *(unsigned int*)(esp + 0x18)
Run Code Online (Sandbox Code Playgroud)
与此同时
lea eax, [esp+0x18]
Run Code Online (Sandbox Code Playgroud)
手段
mov eax, esp
add eax, 0x18
Run Code Online (Sandbox Code Playgroud)
在C中看起来像
eax = esp + 0x18
Run Code Online (Sandbox Code Playgroud)