You didn't tell what MCU your are using. On S12X vectors redirection is simple. For this purpose you have interrupt vector base register. That register is 8bits wide and contains upper half of interrupt vectors address. IVBR contains 0xFF by default on reset, which means that all vectors are at 0xFFxx. So one application could have vectors say at 0xEFxx, another one at 0x5Fxx. Bootloader then should set up IVBR and jump to where application's vector is pointing to.
S12 have no IVBR register and each bootlaoder's ISR should jump to application's ISR. Certainly you need some variable in bootloader code, that will help determining where are application's vectors. Please note, that loadable applications should have reserved space for this variable, so that it is never overwritten by application. Bootloader ISR's could look like this:
unsigned short ivbr; //
#pragma TRAP_PROC
void irq_isr(void)
{
asm {
LDD ivbr
JMP [D, Virq]
}
}
In this case ivbr should be 0 for normal reset vectors at 0xFFxx. For vectors at 0xEFxx (reset vector at 0xEFFE) ivbr should contain 0xF000 (0xEFFE+2).