linux: "real"段错误处理程序在哪里?

标签 linux linux-kernel segmentation-fault

如果我读/写/跳转到一个映射地址,即。

.text
    .global _start
_start:
     movl   $1,%edx
     jmp     *%edx

这会导致段错误。

我想知道,系统(内核)的实际部分是什么 拦截对未映射地址的读/写(如何?) 并抛出“用户模式”信号?

最佳答案

一切都来自架构陷阱表。这通常称为 entry.S(在 x86 上在 entry_32 和 entry_64.S 之间拆分)并且具有汇编程序链接,在进入内核的 C 代码之前执行许多操作(取决于配置)。

因此,无效的内存访问应该通过 page_fault 或 general_protection 进入,并且可能最终执行 force_sig_info,然后最终在 send_signal (kernel/signal.c) 中排队返回用户空间。

关于linux: "real"段错误处理程序在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1037240/

相关文章:

linux-kernel - 在哪个 header 中声明了 copy_from_user()?

linux - i2cdetect 在 goodix 芯片上找不到任何东西

ios - SIGSEGV SEGV_MAPERR 崩溃,仅 iOS 9.2.1

c - 段错误--信号 11

java - 检查linux中是否存在java进程

linux - 令人困惑的 shell 语法

linux - 在 Linux/aarch64 上记录和调试未对齐的访问

在 vector 中使用删除的 C++ 段错误

linux - 如何确认 SFTP 文件传送?

linux - 打开在 docker 容器(Alpine)中创建的 pdf 文件