我正在学习汇编语言和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");
iopl
系统调用,可以让你提高特权级别并从用户空间进程中禁用中断。虽然这可能是个可怕的想法,但并不被支持。 - Peter Cordes