gpt4 book ai didi

linux - 用户空间和内核空间中的空指针解引用

转载 作者:太空狗 更新时间:2023-10-29 11:07:59 25 4
gpt4 key购买 nike

如果我们在用户空间和内核空间取消引用空指针会发生什么?

根据我的理解,行为基于编译器、架构等。

但一般来说,对于分配有虚拟内存的每个用户空间程序,分页用于使用页表将虚拟地址转换为物理地址。

因此,如果我们在用户空间中取消引用空指针,则该地址无效,因此将发生上下文切换,并且在内核中基于此空指针取消引用的中断“将出现段错误或页面错误错误”。

在内核空间:

如果我们取消引用 NULL 指针,则有可能导致系统崩溃或内核可能无法从该调用返回。

我的理解是否正确?或者有什么其他信息缺失,请解释。

Ref:我从这个“What happens in OS when we dereference a NULL pointer in C?”中了解到

最佳答案

内核将虚拟地址 0 处的页面映射到所有未设置权限位的进程。当您尝试访问该页面时,您会收到 page fault。 .处理它的内核例程发出一个 SIGSEGV signal到你的过程。如果您没有注册 SIGSEGV 的处理程序,核心是 dumped并且您会看到“段错误”消息。

内核方面,情况有点不同。毕竟,内核应该是健壮的:

  • 如果取消引用发生并且可以恢复(例如,您的触控板驱动程序犯了罪),kernel oops生成。内核继续运行(目前)。
  • 如果取消引用发生以致无法恢复,Oops 会导致 kernel panic .需要重新启动。
  • 如果出于某种原因,有数据映射到第零页,您将破坏内存。这可能会导致 panic ,被忽视甚至被abused for a privilege escalation attack .

关于linux - 用户空间和内核空间中的空指针解引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35239407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com