diff --git a/06-subroutines-interruptions/fuck-system.c b/06-subroutines-interruptions/fuck-system.c index df8495f..1e7248b 100644 --- a/06-subroutines-interruptions/fuck-system.c +++ b/06-subroutines-interruptions/fuck-system.c @@ -1,21 +1,23 @@ #include #include #include +#include -typedef struct { - uint16_t size; - uint64_t adress; -} Fuck_IDT_register; - -extern void store_idt(Fuck_IDT_register *storage); +extern void store_idt(struct desc_ptr *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); + + struct desc_ptr newidtreg; + struct desc_ptr oldidtreg; + gate_desc *oldidt, *newidt; + store_idt(&oldidtreg); + newidtreg.address = oldidtreg.address; + newidtreg.size = oldidtreg.size; + newidt = (gate_desc *)newidtreg.adress; + memcpy(newidt, oldidt, newidtreg.size); + pr_info("idt register stored"); return 0; } diff --git a/06-subroutines-interruptions/low-level-asm.asm b/06-subroutines-interruptions/low-level-asm.asm index 9a6e57a..bf22b33 100644 --- a/06-subroutines-interruptions/low-level-asm.asm +++ b/06-subroutines-interruptions/low-level-asm.asm @@ -5,3 +5,4 @@ section .text store_idt: ; rdi - указатель sidt [rdi] ret + int3