void* ncai_get_instruction_pointer(hythread_t thread) { thread_context_t context; IDATA status = hythread_get_thread_context(thread, &context); if (status != TM_ERROR_NONE) return NULL; NcaiRegisters regs; ncai_context_to_registers(&context, ®s); return (void*)regs.eip; }
bool ncai_get_generic_registers(hythread_t thread, Registers* regs) { if (regs == NULL) return false; CONTEXT context; context.ContextFlags = CONTEXT_FULL; // CONTEXT_ALL IDATA status = hythread_get_thread_context(thread, &context); if (status != TM_ERROR_NONE) return false; port_thread_context_to_regs(regs, &context); return true; }
bool ncai_get_register_value(hythread_t thread, jint reg_number, void* buf_ptr) { thread_context_t context; IDATA status = hythread_get_thread_context(thread, &context); if (status != TM_ERROR_NONE) return false; NcaiRegisters regs; ncai_context_to_registers(&context, ®s); memcpy( buf_ptr, ((U_8*)®s) + g_ncai_reg_table[reg_number].offset, g_ncai_reg_table[reg_number].size); return true; }