我正在使用Windbg來研究進程內存,並且忍不住注意到人們接受的東西。當你打印出寄存器:爲什麼堆棧低於內存中的文本?
eax=00000000 ebx=008b6f00 ecx=01010101 edx=ffffffff esi=00000000 edi=00465000
eip=77f9d022 esp=05cffc48 ebp=05cffc54 iopl=0 nv up ei ng nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000286
注意,ESP和EBP具有價值比EIP低,這意味着堆棧nthan過程(!?)的文本部分地方更低。爲什麼是這樣?據我所知(我也用gdb在Linux中做過同樣的事情),堆棧應該是高內存和低文本 - 就像很多書中說的那樣。
有沒有我不知道的東西?
存儲器的佈局方式取決於操作系統和CPU。 CPU決定堆棧增長的方式,並決定放置段的操作系統。它確實可能在任何地方,但堆棧增長的方向是一個沉重的影響。他們把它放在任何有意義的地方(並且在某些情況下,更安全)。 – 2013-03-23 06:13:11
這個堆棧還在向下擴展,我不認爲把堆棧放在低於文本的位置上是合理的,這就是爲什麼我要問。你能否更具體地說明爲什麼把棧放低會比使用理論上的存儲器佈局更好? – 2013-03-23 06:32:58
它是關於Windows內存管理的問題嗎? – sergmat 2013-03-23 06:50:25