I am having problems installing a custom int3 handler from a com32 app. Here is what I have tried: void int3_handler() { put_str("int3!!!"); __asm__("iret"); } void init_handlers() { struct { unsigned long limit : 16; unsigned long base : 32; } __attribute__((packed)) idtr; __asm__("sidt (%0)" :: "r"(&idtr)); unsigned long *idt = (void*)idtr.base; idt[3] = int3_handler; put_str("about to try int3"); anykey(); __asm__("sti"); __asm__("int3"); put_str("DONE!"); anykey(); } When I execute the init_handlers function, I see "DONE!", but not "int3!!!". put_str() and anykey() functions do as you expect, and put_str does not call any interrupts (it writes directly to CGA memory).