From eb85d6dd9ad037902144b1e5f69d9314d6e5108e Mon Sep 17 00:00:00 2001 From: root Date: Thu, 17 Oct 2024 01:02:59 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=20=D1=82=D0=B0?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D1=86=D1=8B=20=D0=BF=D1=80=D0=B5=D1=80=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 06-subroutines-interruptions/fuck-system.c | 22 ++++++++++--------- .../low-level-asm.asm | 1 + 2 files changed, 13 insertions(+), 10 deletions(-) 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