我正在學習大會,我有這個彙編代碼,並有很多理解它有人可以澄清它嗎?彙編語言如何工作?
Dump of assembler code for function main:
0x080483ed <+0>: push ebp
0x080483ee <+1>: mov ebp,esp
0x080483f0 <+3>: sub esp,0x10
0x080483f3 <+6>: mov DWORD PTR [ebp-0x8],0x0
0x080483fa <+13>: mov eax,DWORD PTR [ebp-0x8]
0x080483fd <+16>: add eax,0x1
0x08048400 <+19>: mov DWORD PTR [ebp-0x4],eax
0x08048403 <+22>: leave
0x08048404 <+23>: ret
到現在爲止,我的理解知識是:
推的東西(不知道是什麼)在ebp
寄存器。然後將esp
寄存器的內容轉換爲ebp
(我認爲ebp
的數據應該被覆蓋),然後從esp
中減去10並將它存儲在esp
(該函數將佔用10個字節,該寄存器不再被使用,所以沒有點做這個操作)。現在將值0指定爲小於ebp
的8個字節指向的地址。
現在將該地址存儲到寄存器eax
。現在,將eax
指向的值加1(以前的值丟失)。現在將eax
的值存儲在[ebp-0x4]
上,然後轉到main
的返回地址。
這裏是上面的程序我的C代碼:
int main(){
int x=0;
int y = x+1;
}
現在,有人可以計算出,如果我沒猜錯的話,我也不懂mov
在< +13>它增加了1加到地址ebp-0x8
,但那是int x
的地址所以,x
不再包含0.我在哪裏錯了?
爲什麼不選擇裝配教程? 'push ebp'不會將某些東西壓入'ebp',它會將當前的'ebp'內容壓入堆棧,以便稍後恢復。 – user4815162342
閱讀下面的內容:http://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames – Rob