gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:16:46 25 4
gpt4 key购买 nike

我正在学习有关 Assembly 和 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"); 行时,我收到了这条消息:

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

最佳答案

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

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

关于c - 为什么清除中断标志会导致 C 中的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20949450/

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