我正在使用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,这意味着堆栈比流程的文本部分(!?)更低。为什么是这样?据我所知(我在Linux中使用gdb做了同样的事情),堆栈应该在高内存中,文本在低位 - 就像许多书中说的那样。
有什么东西我不知道吗?
答案 0 :(得分:4)
Thread堆栈可能位于用户模式virtual address space内的任何地址范围内。 VMMap显示了进程提交的虚拟内存类型的细分。
答案 1 :(得分:2)
堆栈应该在高内存中,文本在低位
这是一种误解。操作系统完全取决于如何在进程的虚拟内存中进行布局。
特别值得注意的是:
此外,在内存中随机化事物的位置被认为是良好的安全实践。请参阅Address space layout randomization。