2012-10-28 48 views
0

這行在下面的代碼中做了什麼?大會,這條線做什麼?

0x0804840c <+3>: mov 0x8(%ebp),%edx 

我知道MOV%×,%Y移動值章%X%到Y,但8從未被設置爲任何棧偏移,所以我不知道什麼是被移到%EDX。我真的很陌生,我完全迷失了方向。

(IA32 Assembly) 

    0x08048409 <+0>: push %ebp 

    0x0804840a <+1>: mov %esp,%ebp 

    0x0804840c <+3>: mov 0x8(%ebp),%edx 

    0x0804840f <+6>: mov %edx,%eax 

    0x08048411 <+8>: shl $0x4,%eax 

    0x08048414 <+11>: sub %edx,%eax 

    0x08048416 <+13>: pop %ebp 

    0x08048417 <+14>: ret 
+1

[函數的第一個棧參數](http://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames)是什麼被複制。 – DCoder

回答

3

這是32-bit x86 ELF ABI,模樣,所以在8(%ebp)堆棧槽可以容納一個參數1到這個功能,由呼叫者放在那裏。

整體功能計算(x << 4) - x

+0

想了一下上下文,謝謝! – Mappan