为什么清除中断标志会导致C中的分段错误?

2024-03-11

我正在学习一些有关汇编和 C 的基础知识。出于学习目的,我决定编写一个禁用中断的简单程序,当用户想要在控制台中输入某些内容时,他/她不能:

#include <stdio.h>
int main(){
    int a;
    printf("enter your number : ");
    asm ("cli");
    scanf("%d", &a);
    printf("your number is %d\n" , a);     
    return 0;
}

但是当我用 GCC 编译它时,我遇到了分段错误:

Segmentation fault (core dumped)

当我调试它时gdb当程序到达时我收到此消息asm("cli"); line:

Program received signal SIGSEGV, Segmentation fault.
main () at cli.c:6
6       asm ("cli");

发生这种情况是因为您无法禁用用户空间程序的中断。所有的中断都在内核的控制之下。您需要从内核空间执行此操作。在执行此操作之前,您需要首先学习内核内部结构,并且根据我的知识,使用中断非常关键,并且需要更多有关内核的知识。

您需要编写一个可以通过 /dev/ (或其他一些)接口与用户空间交互的内核模块。用户空间代码应请求内核模块禁用中断。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么清除中断标志会导致C中的分段错误? 的相关文章