diff --git a/06-subroutines-interruptions/fuck-system.c b/06-subroutines-interruptions/fuck-system.c new file mode 100644 index 0000000..df8495f --- /dev/null +++ b/06-subroutines-interruptions/fuck-system.c @@ -0,0 +1,30 @@ +#include +#include +#include + +typedef struct { + uint16_t size; + uint64_t adress; +} Fuck_IDT_register; + +extern void store_idt(Fuck_IDT_register *storage); + +static int __init fuck_system(void) +{ + pr_info("start to fuck system"); + struct desc_ptr newidtr; + gate_desc *oldint, *newint; + Fuck_IDT_register idt_register; + store_idt(&idt_register); + pr_info("idt register stored"); + return 0; +} + +static void __exit unfuck_system(void) +{ + pr_info("start to unfuck system"); +} + +module_init(fuck_system); +module_exit(unfuck_system); +MODULE_LICENSE("GPL"); diff --git a/06-subroutines-interruptions/low-level-asm.asm b/06-subroutines-interruptions/low-level-asm.asm new file mode 100644 index 0000000..9a6e57a --- /dev/null +++ b/06-subroutines-interruptions/low-level-asm.asm @@ -0,0 +1,7 @@ +global store_idt + +section .text + +store_idt: ; rdi - указатель + sidt [rdi] + ret