我正在学习一些有关汇编和 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(使用前将#替换为@)