我正在阅读这个问题关于当进程的堆栈和堆相互碰撞时会发生什么。
但是,我在我的 Linux 上做了一些测试,以检查我是否可以强制碰撞!所以这就是我所做的:
gdb
编写了以下 C 程序来检查进程地址空间的“边界”。我通过使用 gdb
的 x
命令执行二进制搜索找到了“限制”,直到找到它无法再访问的地址。int main(void) {
int x;
}
0x555555554000
0x555555579fff
0x7fffff7ff000
0x7fffffffefff
0x7fffff7ff000 - 0x555555579fff = 46912487575545
字节,相当于 43690 GiB (!!)我是对还是错?如果正确,是否有任何系统可以用来强制碰撞?如果错了,我错了什么?
值得注意的是,我在网上搜索了一段时间,询问这是否真的不可能,但我没有找到任何资源谈论这个。他们都假设有可能发生碰撞。