为什么明确的interrput标志导致C中的分段错误?

前端之家收集整理的这篇文章主要介绍了为什么明确的interrput标志导致C中的分段错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在学习关于Assembly和C.的一些基础知识用于学习目的我决定编写一个禁用Interrupts的简单程序,当用户想要在控制台中键入内容时他/她不能:
#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”)时,我收到了这条消息;线:

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

解决方法

发生这种情况是因为您无法禁用用户空间程序的中断.所有中断都在内核的控制之下.你需要从内核空间做到这一点.在你这样做之前,你需要首先学习内核内核并且使用中断非常关键,并且根据我的知识需要更多关于内核的知识.

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

猜你在找的C&C++相关文章