2014-03-04 41 views
3

我正在學習x86彙編,並且在lea指令中遇到了一些麻煩。x86集合中的LEA

0x080486f7 <+21>: lea eax,[esp+0x18] 

任何人都可以解釋這一行發生了什麼?在我的理解中,它取[esp + 0x18]的值並將該值解釋爲地址,並將int地址的值放入eax中。

回答

0

它將esp + 0x18存儲在eax中。換句話說,它只是加法。 LEA經常用於執行基本的算術運算。

+2

我相信存在ASM不濫用。 –

+0

好吧,那是一個笑話,但我已經改變了「濫用」到「使用」:) – StilesCrisis

2

基本上

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