moj*_*ntu 6 c x86 assembly interrupt
我正在学习关于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;
}
Run Code Online (Sandbox Code Playgroud)
但是当我用GCC编译它时,我得到了分段错误:
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
当我调试它gdb时,当程序到达该asm("cli");行时我得到了这条消息:
Program received signal SIGSEGV, Segmentation fault.
main () at cli.c:6
6 asm ("cli");
Run Code Online (Sandbox Code Playgroud)
Chi*_*nna 12
发生这种情况是因为您无法禁用用户空间程序的中断.所有中断都在内核的控制之下.你需要从内核空间做到这一点.在你这样做之前,你需要首先学习内核内核并且使用中断非常关键,并且根据我的知识需要更多关于内核的知识.
您需要编写一个可以通过/ dev /(或其他)接口与用户空间交互的内核模块.用户空间代码应该请求内核模块禁用中断.