raddbg -> raddbgi

This commit is contained in:
Ryan Fleury
2024-02-12 14:56:10 -08:00
parent 4b68967fbe
commit aa2a0948ba
55 changed files with 2620 additions and 2945 deletions
+42 -42
View File
@@ -199,7 +199,7 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE
DBGI_Scope *scope = dbgi_scope_open();
String8 exe_path = demon_full_path_from_module(scratch.arena, module);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
U64 base_vaddr = demon_base_vaddr_from_module(module);
for(CTRL_UserBreakpointNode *n = user_bps->first; n != 0; n = n->next)
{
@@ -224,16 +224,16 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE
// rjf: filename -> src_id
U32 src_id = 0;
{
RADDBG_NameMap *mapptr = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_NormalSourcePaths);
RADDBGI_NameMap *mapptr = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_NormalSourcePaths);
if(mapptr != 0)
{
RADDBG_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, mapptr, &map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, filename_normalized.str, filename_normalized.size);
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, filename_normalized.str, filename_normalized.size);
if(node != 0)
{
U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
src_id = ids[0];
@@ -244,11 +244,11 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE
// rjf: src_id * pt -> push
{
RADDBG_SourceFile *src = raddbg_element_from_idx(rdbg, source_files, src_id);
RADDBG_ParsedLineMap line_map = {0};
raddbg_line_map_from_source_file(rdbg, src, &line_map);
RADDBGI_SourceFile *src = raddbgi_element_from_idx(rdbg, source_files, src_id);
RADDBGI_ParsedLineMap line_map = {0};
raddbgi_line_map_from_source_file(rdbg, src, &line_map);
U32 voff_count = 0;
U64 *voffs = raddbg_line_voffs_from_num(&line_map, pt.line, &voff_count);
U64 *voffs = raddbgi_line_voffs_from_num(&line_map, pt.line, &voff_count);
for(U32 i = 0; i < voff_count; i += 1)
{
U64 vaddr = voffs[i] + base_vaddr;
@@ -265,19 +265,19 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE
U64 voff = bp->u64;
if(rdbg != 0 && rdbg->procedures != 0)
{
RADDBG_NameMap *mapptr = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_Procedures);
RADDBGI_NameMap *mapptr = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Procedures);
if(mapptr != 0)
{
RADDBG_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, mapptr, &map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, symbol_name.str, symbol_name.size);
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, symbol_name.str, symbol_name.size);
if(node != 0)
{
U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
for(U32 match_i = 0; match_i < id_count; match_i += 1)
{
U64 proc_voff = raddbg_first_voff_from_proc(rdbg, ids[match_i]);
U64 proc_voff = raddbgi_first_voff_from_proc(rdbg, ids[match_i]);
U64 proc_vaddr = proc_voff + base_vaddr;
DEMON_Trap trap = {process, proc_vaddr + voff, (U64)bp};
demon_trap_chunk_list_push(arena, traps_out, 256, &trap);
@@ -1638,21 +1638,21 @@ ctrl_thread__next_demon_event(Arena *arena, CTRL_Msg *msg, DEMON_RunCtrls *run_c
CTRL_Handle module = ctrl_handle_from_demon(modules.handles[0]);
String8 module_path = demon_full_path_from_module(scratch.arena, ctrl_demon_handle_from_ctrl(module));
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, module_path, max_U64);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBG_NameMap *unparsed_map = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_GlobalVariables);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_NameMap *unparsed_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_GlobalVariables);
if(rdbg->global_variables != 0 && unparsed_map != 0)
{
RADDBG_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, unparsed_map, &map);
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, unparsed_map, &map);
String8 name = str8_lit("__asan_shadow_memory_dynamic_address");
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, name.str, name.size);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
if(node != 0)
{
U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
RADDBG_GlobalVariable *global_var = raddbg_element_from_idx(rdbg, global_variables, ids[0]);
RADDBGI_GlobalVariable *global_var = raddbgi_element_from_idx(rdbg, global_variables, ids[0]);
U64 global_var_voff = global_var->voff;
U64 global_var_vaddr = global_var->voff + demon_base_vaddr_from_module(ctrl_demon_handle_from_ctrl(module));
Architecture arch = demon_arch_from_object(ev->thread);
@@ -2143,10 +2143,10 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U64 module_base_vaddr = demon_base_vaddr_from_module(module);
String8 exe_path = demon_full_path_from_module(scratch.arena, module);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBG_NameMap *unparsed_map = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_Procedures);
RADDBG_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, unparsed_map, &map);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_NameMap *unparsed_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Procedures);
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, unparsed_map, &map);
//- rjf: add trap for user-specified entry point, if specified
B32 entries_found = 0;
@@ -2157,15 +2157,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0;
{
String8 name = n->string;
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, name.str, name.size);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
procedure_id = ids[0];
}
}
U64 voff = raddbg_first_voff_from_proc(rdbg, procedure_id);
U64 voff = raddbgi_first_voff_from_proc(rdbg, procedure_id);
if(voff != 0)
{
entries_found = 1;
@@ -2183,15 +2183,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0;
{
String8 name = n->string;
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, name.str, name.size);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
procedure_id = ids[0];
}
}
U64 voff = raddbg_first_voff_from_proc(rdbg, procedure_id);
U64 voff = raddbgi_first_voff_from_proc(rdbg, procedure_id);
if(voff != 0)
{
DEMON_Trap trap = {run_ctrls.run_entities[process_idx], module_base_vaddr + voff};
@@ -2216,15 +2216,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0;
{
String8 name = hi_entry_points[idx];
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, name.str, name.size);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
procedure_id = ids[0];
}
}
U64 voff = raddbg_first_voff_from_proc(rdbg, procedure_id);
U64 voff = raddbgi_first_voff_from_proc(rdbg, procedure_id);
if(voff != 0)
{
entries_found = 1;
@@ -2260,15 +2260,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0;
{
String8 name = lo_entry_points[idx];
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, name.str, name.size);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
procedure_id = ids[0];
}
}
U64 voff = raddbg_first_voff_from_proc(rdbg, procedure_id);
U64 voff = raddbgi_first_voff_from_proc(rdbg, procedure_id);
if(voff != 0)
{
entries_found = 1;
@@ -2866,7 +2866,7 @@ ctrl_thread__run(CTRL_Msg *msg)
{
String8 exe_path = demon_full_path_from_module(temp.arena, module);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
for(String8Node *condition_n = conditions.first; condition_n != 0; condition_n = condition_n->next)
{
String8 string = condition_n->string;
@@ -2878,8 +2878,8 @@ ctrl_thread__run(CTRL_Msg *msg)
parse_ctx.type_graph = tg_graph_begin(bit_size_from_arch(arch)/8, 256);
parse_ctx.regs_map = ctrl_string2reg_from_arch(arch);
parse_ctx.reg_alias_map = ctrl_string2alias_from_arch(arch);
parse_ctx.locals_map = eval_push_locals_map_from_raddbg_voff(temp.arena, rdbg, thread_rip_voff);
parse_ctx.member_map = eval_push_member_map_from_raddbg_voff(temp.arena, rdbg, thread_rip_voff);
parse_ctx.locals_map = eval_push_locals_map_from_raddbgi_voff(temp.arena, rdbg, thread_rip_voff);
parse_ctx.member_map = eval_push_member_map_from_raddbgi_voff(temp.arena, rdbg, thread_rip_voff);
}
EVAL_TokenArray tokens = eval_token_array_from_text(temp.arena, string);
EVAL_ParseResult parse = eval_parse_expr_from_text_tokens(temp.arena, &parse_ctx, string, &tokens);