我最近一直在自学编写漏洞利用程序和shellcode,许多指南/书籍声称我们可以猜测堆栈的开始位置,从而通过一些工作来猜测我们的 shellcode 从堆栈上的哪个地址开始。
- 为什么栈的起始地址是可预测的?堆栈不应该从内存中的某个随机地址开始吗?
- 如果堆栈的地址开始只是虚拟地址空间中的某个固定偏移量,那么为什么它会因机器而异?
- 不同平台和栈起始地址的误差范围是多少?
相关:“每个程序的堆栈都从相同的地址开始”,来自黑客的地址困境:利用的艺术,为什么堆栈地址会朝着减少内存地址的方向增长?
编辑对于我的测试,地址空间布局随机化(ASLR)已关闭。