diff options
Diffstat (limited to 'src/analysis/disass/disassembler.c')
-rw-r--r-- | src/analysis/disass/disassembler.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/analysis/disass/disassembler.c b/src/analysis/disass/disassembler.c index dc374db..75e411f 100644 --- a/src/analysis/disass/disassembler.c +++ b/src/analysis/disass/disassembler.c @@ -40,6 +40,7 @@ #include "../../format/format.h" #include "../../glibext/delayed-int.h" #include "../../gui/panels/log.h" +#include "../../plugins/pglist.h" @@ -379,13 +380,18 @@ static void build_disass_prologue(GCodeBuffer *buffer, const char *filename, con * * ******************************************************************************/ -GCodeBuffer *disassemble_binary(const GOpenidaBinary *binary, GBinPart **parts, size_t parts_count, GArchInstruction **instrs) +GCodeBuffer *disassemble_binary(GOpenidaBinary *binary, GBinPart **parts, size_t parts_count, GArchInstruction **instrs) { GCodeBuffer *result; /* Tampon constitué à renvoyer */ const uint8_t *data; /* Données binaires brutes */ off_t length; /* Quantité de ces données */ GDelayedDisassembly *disass; /* Désassemblage à mener */ GWorkQueue *queue; /* Gestionnaire de différés */ + GPluginModule **pglist; /* Liste de greffons */ + size_t pgcount; /* Taille de cette liste */ + size_t i; /* Boucle de parcours */ + + /* Déroulement de l'opération principale */ result = g_code_buffer_new(); @@ -403,6 +409,19 @@ GCodeBuffer *disassemble_binary(const GOpenidaBinary *binary, GBinPart **parts, g_object_unref(G_OBJECT(disass)); + /* Actions post-désassemblage */ + + pglist = get_all_plugins_for_action(PGA_DISASS_PROCESS, &pgcount); + + if (pgcount > 0) + { + for (i = 0; i < pgcount; i++) + g_plugin_module_execute_action_on_binary(pglist[i], binary, PGA_DISASS_PROCESS); + + free(pglist); + + } + return result; } |