2012-02-15 47 views
1

有人可以幫我解釋一下這段代碼嗎?x86組件中的緩衝區

.text:00401270 ; int __cdecl main(int argc,const char **argv,const char *envp) 
.text:00401270 Dst = byte ptr −80h 

...More Code... 

.text:00401270 push ebp 
.text:00401271 mov ebp, esp 
.text:00401273 sub esp, 80h 
.text:00401293 push 80h 
.text:00401298 push 0 
.text:0040129A lea eax, [ebp+Dst] 
.text:0040129D push eax 
.text:0040129E call _memset 

我得到一個大小爲0x80的緩衝區被創建,並且在_memset被調用時用值0填充。但是我不明白指針[ebp + Dst]的用法。爲什麼基本指針(ebp)參與?此外,爲什麼Dst設置爲負值?

回答

2

它的ebp,而不是edp;它被用來訪問堆棧,其中尤其指向之前的上放置了80字節的緩衝區。然後添加Dst,-80,它指向緩衝區的開始(低字節)。不需要在彙編中這樣做,這些構造是編譯器對C代碼的再現。

+0

糟糕,打算輸入ebp。是的,我有點忘了堆棧是向下建立的,所以負的val是有意義的,我應該只是看了sub esp,80並且會看到緩衝區被分配在ebp的正下方。感謝您的澄清。 – user1210446 2012-02-15 08:50:33