【发布时间】:2019-07-24 01:52:18
【问题描述】:
我使用 mmap() 从 /dev/zero 分配 4096 长度的内存空间,我发现我仍然可以访问这个空间之外的内存(例如 start_pt 是指向该空间的指针,我可以打印*start_pt+8192 的值没有任何分段错误)。并且存储在越界区域中的值似乎是随机的。
有人知道这些值是什么以及我为什么可以访问它们吗?
【问题讨论】:
-
访问越界内存是未定义的行为,任何事情都可能发生。不要这样做,或尝试推理它。
-
在 Linux
cat /proc/1234/maps上,你会看到。将 1234 替换为程序的 PID。添加睡眠或其他内容,使其不会退出。 -
你指的是
*start_pt + 8192还是*(start_pt + 8192)?前者有效;后者不是。 -
@Shawn 除非您正在寻找安全漏洞。那么 C 编程语言和未定义的行为是你最好的朋友。
-
和往常一样:发布您的实际代码,以便我们可以尝试与您完全相同的实验。
标签: c mmap virtual-memory