作者怎么能百分百确定环境变量的地址呢?

How can author know the address of the enviroment variable with %100 certanity?

剥削艺术一书第 165 页声称

可是,这个地址0xbffffffa怎么可能固定呢?我的意思是,作者表达自己的方式表明这是任何机器上任何 linux 发行版的普遍事实,但绝对不是这种情况,那么究竟是什么意思?他怎么知道shellcode的地址?

无论如何都不是这方面的专家,但我的理解是 Linux 每个进程都有自己的虚拟地址 space,内核内存映射到 0xC0000000 以上的地址,堆栈从 0xC0000000 向下增长,堆从 0x00000000 向上增长。

如果是这样,那就是说环境将是堆栈中的第一件事——0x2BFFFFFA 仅比 0xC0000000 下面几个字节——并且你可以预测它的地址,因为只有一个固定的数字之前的事情。

我认为这仅适用于未打开地址 space 布局随机化 (ASLR) 的情况,尽管据我所知,我认为 ASLR 不会完全阻止此类利用。