Теоретически, вы можете реализовать не-init-секцию set_trap_gate()
через:
void set_trap_gate(int n, void *addr)
{
struct { uint16_t lim; struct desc_struct *idt_table; }
__attribute__((packed)) idt;
__asm__ ("sidt %0" : : "m"(idt) : "memory");
_set_gate(idt.idt_table + n, 15, 0, addr);
}
Но это будет локально для ЦП, т. Е. Не гарантируется изменение любой другой IDT, кроме той, на которой он работает. Кроме того, это может привести к загрязнению памяти, защищенной от записи.
Чего именно ты хочешь достичь?