feat: За секунду до падения системы

This commit is contained in:
root
2024-10-17 12:32:56 +03:00
parent eb85d6dd9a
commit f57aa67887

View File

@ -3,8 +3,18 @@
#include <linux/init.h>
#include <asm/desc.h>
// Смотрим у производителя процессора номер прерывания
// деления на ноль (я сижу на x86-64, а этот номер зависит от архитектуры процессора)
#define ZERODIV_NR 0x00
extern void store_idt(struct desc_ptr *storage);
static void example_handler(void)
{
pr_warn("entered the handler");
return;
}
static int __init fuck_system(void)
{
pr_info("start to fuck system");
@ -12,12 +22,28 @@ static int __init fuck_system(void)
struct desc_ptr newidtreg;
struct desc_ptr oldidtreg;
gate_desc *oldidt, *newidt;
// Выделяем память под 256 прерываний
unsigned long new_page = __get_free_page(GFP_KERNEL);
if (!new_page)
{
return -ENOMEM;
}
store_idt(&oldidtreg);
newidtreg.address = oldidtreg.address;
newidtreg.address = new_page;
newidtreg.size = oldidtreg.size;
newidt = (gate_desc *)newidtreg.adress;
newidt = (gate_desc *)newidtreg.address;
memcpy(newidt, oldidt, newidtreg.size);
pack_gate(
(newidt + ZERODIV_NR),
GATE_INTERRUPT,
(unsigned long) example_handler,
0,
0,
__KERNEL_CS
);
load_idt(&newidtreg);
pr_info("idt register stored");
return 0;
}