- 論壇徽章:
- 0
|
局部的變量,可以認為是編譯時計算好的,但是運行時才用,實際上你可以用vc的debug功能看一眼就明白了,就是個
esp - n(從此之后,這個N按理說是你需要的變量空間,但是也不一定,依賴與編譯器實現(xiàn),反正就是從棧上留一塊地,等引用那個變量的時候就用ebp + xxx)
void test()
{
00401000 push ebp
00401001 mov ebp,esp
00401003 sub esp,0Ch //這里是分配棧空間,所謂的編譯時計算就是這個是確定的
int x = 8;
00401006 mov dword ptr [x],8 //這里其實是根據(jù)那個ebp地址 + 多少(依賴于你的前面那個變量大小,這個x可能地址就是ebp + 0,不過這些都根據(jù)編譯器有關(guān),所以不是那么確定的),但是匯編器可能能直接根據(jù)符號得倒地址,所以這里直接顯示 x變量名了。
int y = 9;
0040100D mov dword ptr [y],9
int z = 10;
00401014 mov dword ptr [z],0Ah
}
0040101B mov esp,ebp
0040101D pop ebp
0040101E ret
[ 本帖最后由 Solidus 于 2007-10-12 01:27 編輯 ] |
|