I don't understand why you are not using l_code_addr in _binExec().
I would try this:
void _binExec(void *code_addr)
{
void (*pFct)(void) = NULL;
/* Point on __main address located in the second word in vector table */
pFct = (void (*)(void))(*(uint32_t *)((uint32_t)code_addr + 4));
pFct();
}
Edit : I Wonder whether the vector table should be relocated ?