From c2b41bbbd0ba0d5bb7bf6fe143797c99cefc66f3 Mon Sep 17 00:00:00 2001 From: Yatis Date: Sat, 13 Mar 2021 22:27:32 +0100 Subject: [PATCH] Gintracer v0.8.2 - Special constructors / destructors @update <> move the drivers' context into the trace session <> add "special" constructor for a "pre-initialisation", usefull to move the callgraph generation into its specific menu part. @fix <> when the TRACER_CALLGRAPH is not set, the callgraph was always generated. (fixed) --- demo/main.c | 2 +- gintrace.g3a | Bin 119940 -> 120164 bytes include/gintrace/gui/menu.h | 10 +++++++ include/gintrace/menu/callgraph.h | 4 +++ include/gintrace/tracer.h | 1 + libgintrace-cg.a | Bin 115338 -> 115816 bytes src/gui/menu.c | 35 ++++++++++++++++++++++++ src/menu/callgraph.c | 43 +++++++++++++++++++++++++++++- src/ubc/handler.c | 42 +++++++++-------------------- 9 files changed, 106 insertions(+), 31 deletions(-) diff --git a/demo/main.c b/demo/main.c index 52e6383..ecda3e9 100644 --- a/demo/main.c +++ b/demo/main.c @@ -44,7 +44,7 @@ int main(void) /* prepare tracer */ session = tracer_create_session(syscall, - TRACER_DISASM | TRACER_CONTEXT | TRACER_HEXDUMP); + TRACER_DISASM | TRACER_CONTEXT | TRACER_HEXDUMP | TRACER_CALLGRAPH); if (session == NULL) { dclear(C_WHITE); dtext(0, 0, C_BLACK, "Unable to create tracer session"); diff --git a/gintrace.g3a b/gintrace.g3a index 4a392eb3dbee9878dc0de1c430e3f3edb9185da2..0351cf71c7ae3da5f046a6529b866d202f8eb744 100644 GIT binary patch delta 18521 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 B+yejr delta 18233 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 qBF-p>jrG&oNY9*6tvN10p?xG*aGmF`J zjbN^&gD!{)qcUzD2F&s!8Mgp4PKzg$d6A4;(DVpTDCyz}#naxxE58cTk3!dyz@r-V zg6HO~nJ>(J$wNpw-L=0&=-t1Tps(fw-xKm3<=RDGeIXb6=4*EoL&Vi~4v%r?5w1d4 z@%N_tkXzk|%WR7r&3b9YA=y#k#Y68UM0QsR{zhAcm7Q$`5)^-3EyBP1D)veE0%F^t F{{jJ#M124N diff --git a/src/gui/menu.c b/src/gui/menu.c index cf2b92c..6708358 100644 --- a/src/gui/menu.c +++ b/src/gui/menu.c @@ -71,6 +71,41 @@ int menu_unregister(struct menu_group *gmenu, const char *name) return (menu_retval_unregistered); } +/* menu_special_ctor(): Involve special contructor */ +int menu_special_ctor(struct menu_group *gmenu) +{ + struct menu_list *node; + int a; + + if (gmenu == NULL) + return (menu_retval_efault); + a = 0; + node = gmenu->list; + while (node != NULL) { + if (node->menu != NULL && node->menu->special.ctor != NULL) + a += node->menu->special.ctor((void*)gmenu->arg); + node = node->next; + } + return (a); +} +/* menu_special_ctor(): Involve special contructor */ +int menu_special_dtor(struct menu_group *gmenu) +{ + struct menu_list *node; + int a; + + if (gmenu == NULL) + return (menu_retval_efault); + a = 0; + node = gmenu->list; + while (node != NULL) { + if (node->menu != NULL && node->menu->special.dtor != NULL) + a += node->menu->special.dtor((void*)gmenu->arg); + node = node->next; + } + return (a); +} + /* menu_init(): Initialize all menu */ int menu_init(struct menu_group *gmenu) { diff --git a/src/menu/callgraph.c b/src/menu/callgraph.c index 04f6703..603674d 100644 --- a/src/menu/callgraph.c +++ b/src/menu/callgraph.c @@ -379,6 +379,42 @@ static void callgraph_command(struct tsession *session, int argc, char **argv) input_write("success"); } +/* callgraph_special_ctor(): Special constructor used to generate the graph */ +static int callgraph_special_ctor(struct tsession *session) +{ + struct callgraph *callgraph = &session->menu.callgraph; + + if (callgraph->special.breakpoint != 0x00000000 + && callgraph->special.spc != 0x00000000 + && callgraph->special.spc != callgraph->special.breakpoint) { + callgraph_init(session); + callgraph->special.spc = session->info.context->spc; + ubc_set_breakpoint(0, (void*)callgraph->special.spc, NULL); + return (1); + } + return (0); +} + +/* callgraph_special_dtor(): Special destructor used to bypass the breakpoint*/ +//TODO: update, bad interconnection with the disasm menu :( +static int callgraph_special_dtor(struct tsession *session) +{ + struct callgraph *callgraph = &session->menu.callgraph; + uintptr_t breakpoint; + + breakpoint = session->menu.disasm.next_break; + if (session->menu.disasm.skip == 0) { + callgraph->special.spc = session->info.context->spc; + ubc_set_breakpoint(0, (void*)callgraph->special.spc, NULL); + callgraph->special.breakpoint = breakpoint; + } else { + callgraph->special.breakpoint = breakpoint; + ubc_set_breakpoint(0, (void*)breakpoint, NULL); + callgraph->special.spc = breakpoint; + } + return (1); +} + //--- // Define the menu //--- @@ -388,5 +424,10 @@ struct menu menu_callgraph = { .display = (void*)&callgraph_display, .keyboard = (void*)&callgraph_keyboard, .command = (void*)&callgraph_command, - .dtor = NULL + .dtor = NULL, + + .special = { + .ctor = (void*)&callgraph_special_ctor, + .dtor = (void*)&callgraph_special_dtor, + } }; diff --git a/src/ubc/handler.c b/src/ubc/handler.c index 2c09362..2a1c07a 100644 --- a/src/ubc/handler.c +++ b/src/ubc/handler.c @@ -6,10 +6,7 @@ #include "gintrace/ubc.h" #include "gintrace/tracer.h" -#include - -// custom function -extern void *kernel_env_gint; +/* world information */ extern void *kernel_env_tracer; extern void *gint_switch_to_world(void *buffctx); @@ -18,14 +15,9 @@ extern void *gint_switch_to_world(void *buffctx); * To force generate the callgraph, we use a dirty workaround to force break * at each instruction. But, the disassembler menu can skip one instruction * using OPTN key, so you should not "unskip" the user action. */ -//FIXME: move breakpoint -//FIXME: move spc void gintrace_handler(struct ucontext *context) { - static uintptr_t breakpoint = 0x00000000; - static uintptr_t spc = 0x00000000; struct tsession *session; - void *buffctx; /* force disable the UBC to avoid error */ ubc_block(); @@ -38,39 +30,31 @@ void gintrace_handler(struct ucontext *context) } session->info.context = context; - /* check callgraph job */ - //FIXME: move me - if (breakpoint != 0x00000000 - && spc != 0x00000000 - && spc != breakpoint) { - menu_callgraph.init(session); - spc = context->spc; - ubc_set_breakpoint(0, (void*)context->spc, NULL); + /* check if the special job force skip the breakpoint + * @note: + * This feature is used by the callgraph menu to force the call graph + * generation.*/ + if (menu_special_ctor(session->display.gmenu) != 0) { ubc_unblock(); return; } /* user break point */ - buffctx = gint_switch_to_world(kernel_env_tracer); + session->info.buffctx = gint_switch_to_world(kernel_env_tracer); menu_init(session->display.gmenu); while (menu_is_open(session->display.gmenu) == 0) { menu_draw(session->display.gmenu); menu_keyboard(session->display.gmenu); } - /* if no instruction skip, restore */ - //FIXME: move me - if (session->menu.disasm.skip == 0) { - spc = context->spc; - ubc_set_breakpoint(0, (void*)context->spc, NULL); - breakpoint = session->menu.disasm.next_break; - } else { - breakpoint = session->menu.disasm.next_break; - ubc_set_breakpoint(0, (void*)breakpoint, NULL); - spc = breakpoint; + /* check if a special destructor overwrite the default breakpoint + * generation. If not, set the next break point. */ + if (menu_special_dtor(session->display.gmenu) == 0) { + ubc_set_breakpoint(0, + (void*)session->menu.disasm.next_break, NULL); } /* unblock UBC interrupt */ ubc_unblock(); - gint_switch_to_world(buffctx); + gint_switch_to_world(session->info.buffctx); }