I got it!
In the code you have Midas, the ip_base is a unsigned int.
I changed it to an unsigned char array of 6 elements.
and set it like so:
unsigned int tempAddresss = (unsigned int)&k_idt;
unsigned char* addressGrabber = (unsigned char)&tempAddress;
k_idtp.ip_base[0] = addressGrabber[0];
k_idtp.ip_base[1] = addressGrabber[1];
k_idtp.ip_base[2] = addressGrabber[2];
k_idtp.ip_base[3] = addressGrabber[3];
k_idtp.ip_base[4] = 0x0;
k_idtp.ip_base[5] = 0x0;
IDTR now has the correct IDT address, and exceptions now work

.
IS this just a dirty hack to fix a hidden bug? or is it perfectly valid code?
~zeii.
PS: Now im working on resetting the GDT.
My Bootloader sets up Protected Mode GDT before it gets into the kernel.
But my Kernel has GDT setting code too, which im trying to get working.
However, when I try and load the new GDT, it dies horribly.
Also, is there any point to give the Kernel the ability to reset the GDT?
or is the GDT something that is likely to never change, once its been setup?