feat: чтение регистра таблицы прерываний
This commit is contained in:
@ -1,21 +1,23 @@
|
|||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <asm/desc.h>
|
||||||
|
|
||||||
typedef struct {
|
extern void store_idt(struct desc_ptr *storage);
|
||||||
uint16_t size;
|
|
||||||
uint64_t adress;
|
|
||||||
} Fuck_IDT_register;
|
|
||||||
|
|
||||||
extern void store_idt(Fuck_IDT_register *storage);
|
|
||||||
|
|
||||||
static int __init fuck_system(void)
|
static int __init fuck_system(void)
|
||||||
{
|
{
|
||||||
pr_info("start to fuck system");
|
pr_info("start to fuck system");
|
||||||
struct desc_ptr newidtr;
|
|
||||||
gate_desc *oldint, *newint;
|
struct desc_ptr newidtreg;
|
||||||
Fuck_IDT_register idt_register;
|
struct desc_ptr oldidtreg;
|
||||||
store_idt(&idt_register);
|
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");
|
pr_info("idt register stored");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,3 +5,4 @@ section .text
|
|||||||
store_idt: ; rdi - указатель
|
store_idt: ; rdi - указатель
|
||||||
sidt [rdi]
|
sidt [rdi]
|
||||||
ret
|
ret
|
||||||
|
int3
|
||||||
|
|||||||
Reference in New Issue
Block a user