diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 7a3bf34f..03383933 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -10773,7 +10773,8 @@ rd_regs_fill_slot_from_string(RD_RegSlot slot, String8 query_expr, String8 strin E_TypeKind eval_type_kind = e_type_kind_from_key(e_type_key_unwrap(eval.irtree.type_key, E_TypeUnwrapFlag_AllDecorative)); if(eval_type_kind == E_TypeKind_Ptr || eval_type_kind == E_TypeKind_LRef || - eval_type_kind == E_TypeKind_RRef) + eval_type_kind == E_TypeKind_RRef || + e_space_match(eval.space, e_base_ctx->thread_reg_space)) { eval = e_value_eval_from_eval(eval); } diff --git a/src/raddbg/raddbg_views.c b/src/raddbg/raddbg_views.c index 5dd6e0c4..0c7a0bb5 100644 --- a/src/raddbg/raddbg_views.c +++ b/src/raddbg/raddbg_views.c @@ -2361,6 +2361,16 @@ RD_VIEW_UI_FUNCTION_DEF(disasm) Temp scratch = scratch_begin(0, 0); Access *access = access_open(); + ////////////////////////////// + //- rjf: if disassembly views are parameterized by a register-space evaluation, + // we will interpret it as an address in the primary module. + // + if(e_space_match(eval.space, e_base_ctx->thread_reg_space)) + { + eval = e_value_eval_from_eval(eval); + eval.space = e_base_ctx->primary_module->space; + } + ////////////////////////////// //- rjf: if disassembly views are not parameterized by anything, they // automatically snap to the selected thread's RIP, OR the "temp look @@ -2596,6 +2606,27 @@ RD_VIEW_UI_FUNCTION_DEF(memory) Temp scratch = scratch_begin(0, 0); RD_MemoryViewState *mv = rd_view_state(RD_MemoryViewState); + ////////////////////////////// + //- rjf: if memory views are parameterized by a register-space evaluation, + // we will interpret it as an address in the primary module. + // + if(e_space_match(eval.space, e_base_ctx->thread_reg_space)) + { + eval = e_value_eval_from_eval(eval); + eval.space = e_base_ctx->primary_module->space; + } + + ////////////////////////////// + //- rjf: if memory views are parameterized by nothing, we will + // default to showing the entire memory space of the primary module. + // + Rng1U64 view_range = rd_space_range_from_eval(eval); + if(eval.space.kind == 0) + { + eval.space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, rd_regs()->process), RD_EvalSpaceKind_CtrlEntity); + view_range = rd_whole_range_from_eval_space(eval.space); + } + ////////////////////////////// //- rjf: unpack parameterization info // @@ -2604,17 +2635,6 @@ RD_VIEW_UI_FUNCTION_DEF(memory) Vec4F32 main_tx_color_rgba = ui_color_from_name(str8_lit("text")); Vec4F32 main_tx_color_hsva = hsva_from_rgba(main_tx_color_rgba); F32 main_font_size = ui_bottom_font_size(); - if(e_space_match(eval.space, e_base_ctx->thread_reg_space)) - { - eval = e_value_eval_from_eval(eval); - eval.space = e_base_ctx->primary_module->space; - } - Rng1U64 view_range = rd_space_range_from_eval(eval); - if(eval.space.kind == 0) - { - eval.space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, rd_regs()->process), RD_EvalSpaceKind_CtrlEntity); - view_range = rd_whole_range_from_eval_space(eval.space); - } U64 cursor_base_vaddr = rd_view_setting_u64_from_name(str8_lit("cursor")); U64 mark_base_vaddr = rd_view_setting_u64_from_name(str8_lit("mark")); U64 cursor_size = rd_view_setting_u64_from_name(str8_lit("cursor_size"));