diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/analysis/binary.c | 19 | ||||
| -rw-r--r-- | src/analysis/binary.h | 3 | ||||
| -rw-r--r-- | src/analysis/line-int.h | 2 | ||||
| -rw-r--r-- | src/analysis/line.c | 63 | ||||
| -rw-r--r-- | src/analysis/line.h | 6 | ||||
| -rw-r--r-- | src/plugins/plugin-def.h | 5 | ||||
| -rw-r--r-- | src/plugins/plugin.c | 5 | 
7 files changed, 97 insertions, 6 deletions
| diff --git a/src/analysis/binary.c b/src/analysis/binary.c index 66cc26d..c35118e 100644 --- a/src/analysis/binary.c +++ b/src/analysis/binary.c @@ -1220,6 +1220,25 @@ GRenderingOptions *g_openida_binary_get_options(const GOpenidaBinary *binary)  *                                                                             *  *  Paramètres  : binary = élément binaire à consulter.                        *  *                                                                             * +*  Description : Donne la racine des lignes de rendu issues du désassemblage. * +*                                                                             * +*  Retour      : Lieu d'enregistrement des lignes issues du désassemblage.    * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +GRenderingLine **g_openida_binary_get_lines_root(const GOpenidaBinary *binary) +{ +    return &binary->lines; + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : binary = élément binaire à consulter.                        * +*                                                                             *  *  Description : Fournit les lignes de rendu issues du désassemblage.         *  *                                                                             *  *  Retour      : Lignes issues du désassemblage.                              * diff --git a/src/analysis/binary.h b/src/analysis/binary.h index 533264b..f556c4a 100644 --- a/src/analysis/binary.h +++ b/src/analysis/binary.h @@ -98,6 +98,9 @@ GExeFormat *g_openida_binary_get_format(const GOpenidaBinary *);  /* Fournit les options d'affichage définies pour le binaire. */  GRenderingOptions *g_openida_binary_get_options(const GOpenidaBinary *); +/* Donne la racine des lignes de rendu issues du désassemblage. */ +GRenderingLine **g_openida_binary_get_lines_root(const GOpenidaBinary *); +  /* Fournit les lignes de rendu issues du désassemblage. */  GRenderingLine *g_openida_binary_get_lines(const GOpenidaBinary *); diff --git a/src/analysis/line-int.h b/src/analysis/line-int.h index e240815..38efeda 100644 --- a/src/analysis/line-int.h +++ b/src/analysis/line-int.h @@ -62,7 +62,9 @@ struct _GRenderingLine  #define lines_list_prev_iter(iter, head) dl_list_prev_iter(iter, head, GRenderingLine, link)  #define lines_list_add_before(new, head, pos) dl_list_add_before(new, head, pos, link)  #define lines_list_add_tail(new, head) dl_list_add_tail(new, head, GRenderingLine, link) +#define lines_list_del(item, head) dl_list_del(item, head, GRenderingLine, link)  #define lines_list_for_each(pos, head) dl_list_for_each(pos, head, GRenderingLine, link) +#define lines_list_for_each_safe(pos, head, next) dl_list_for_each_safe(pos, head, next, GRenderingLine, link)  /* Ligne de représentation générique (classe) */ diff --git a/src/analysis/line.c b/src/analysis/line.c index a3ba7a5..bb4188a 100644 --- a/src/analysis/line.c +++ b/src/analysis/line.c @@ -477,6 +477,69 @@ void g_rendering_line_insert_into_lines(GRenderingLine **lines, GRenderingLine *  /******************************************************************************  *                                                                             * +*  Paramètres  : lines = liste de lignes à compléter, ou NULL.                * +*                new   = nouvelles lignes à intégrer à l'ensemble.            * +*                                                                             * +*  Description : Insère des lignes dans un ensemble existant.                 * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +void g_rendering_line_insert_lines(GRenderingLine **lines, GRenderingLine **new) +{ +    GRenderingLine *iter;                   /* Boucle de parcours          */ +    GRenderingLine *next;                   /* Ligne suivante à traiter    */ + +    lines_list_for_each_safe(iter, new, next) +    { +        lines_list_del(iter, new); +        g_rendering_line_insert_into_lines(lines, iter, true); +    } + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : lines = liste de lignes à traiter.                           * +*                start = borne inférieure de l'intervalle (incluse).          * +*                end   = borne supérieure de l'intervalle (incluse).          * +*                                                                             * +*  Description : Supprime une série de lignes comprises dans un intervalle.   * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +void g_rendering_line_remove_range(GRenderingLine **lines, vmpa_t start, vmpa_t end) +{ +    GRenderingLine *first;                  /* Première ligne à traiter    */ +    GRenderingLine *last;                   /* Dernière ligne à traiter    */ +    GRenderingLine *iter;                   /* Boucle de parcours          */ +    GRenderingLine *next;                   /* Ligne suivante à traiter    */ + +    first = g_rendering_line_find_by_address(*lines, NULL, start); +    last = g_rendering_line_find_by_address(*lines, NULL, end); + +    for (iter = first; iter != NULL; iter = next) +    { +        next = g_rendering_line_get_next_iter(*lines, iter, last); + +        lines_list_del(iter, lines); +        g_object_unref(G_OBJECT(iter)); + +    } + +} + + +/****************************************************************************** +*                                                                             *  *  Paramètres  : lines = liste de lignes de représentation à actualiser.      *  *              : iter  = position actuelle dans la liste.                     *  *                last  = dernière élément imposé du parcours ou NULL.         * diff --git a/src/analysis/line.h b/src/analysis/line.h index 5061dcd..fbc560f 100644 --- a/src/analysis/line.h +++ b/src/analysis/line.h @@ -122,6 +122,12 @@ void g_rendering_line_add_to_lines(GRenderingLine **, GRenderingLine *);  /* Insère une ligne dans un ensemble existant.  */  void g_rendering_line_insert_into_lines(GRenderingLine **, GRenderingLine *, bool); +/* Insère des lignes dans un ensemble existant. */ +void g_rendering_line_insert_lines(GRenderingLine **, GRenderingLine **); + +/* Supprime une série de lignes comprises dans un intervalle. */ +void g_rendering_line_remove_range(GRenderingLine **, vmpa_t, vmpa_t); +  /* Fournit l'élement suivant un autre pour un parcours. */  GRenderingLine *g_rendering_line_get_next_iter(GRenderingLine *, const GRenderingLine *, const GRenderingLine *); diff --git a/src/plugins/plugin-def.h b/src/plugins/plugin-def.h index 1b47bd6..adbabd4 100644 --- a/src/plugins/plugin-def.h +++ b/src/plugins/plugin-def.h @@ -41,14 +41,11 @@ typedef enum _PluginAction -struct _GPluginModule; - -  /* Fournit une indication sur le type d'opération(s) menée(s). */  typedef PluginAction (* get_plugin_action_fc) (void);  /* Exécute une action définie sur un binaire chargé. */ -typedef bool (* execute_action_on_binary_fc) (struct _GPluginModule *, GOpenidaBinary *, PluginAction); +typedef bool (* execute_action_on_binary_fc) (GOpenidaBinary *, PluginAction); diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c index ed4c39d..42bef63 100644 --- a/src/plugins/plugin.c +++ b/src/plugins/plugin.c @@ -107,7 +107,7 @@ GPluginModule *g_plugin_module_new(const gchar *filename, GObject *ref)      result->module = g_module_open(filename, G_MODULE_BIND_LAZY); -#if 0 +#if 1      if (!g_module_symbol(result->module, "get_plugin_action", (gpointer *)&__get_action))      {          printf("Err plugin get_action sym\n"); @@ -144,6 +144,7 @@ GPluginModule *g_plugin_module_new(const gchar *filename, GObject *ref)      if (!result->init(ref))          printf("Err loading pg\n"); +    else printf("Loaded '%s' : ok (%p)\n", filename, result);      return result; @@ -185,6 +186,6 @@ PluginAction g_plugin_module_get_action(const GPluginModule *plugin)  bool g_plugin_module_execute_action_on_binary(const GPluginModule *plugin, GOpenidaBinary *binary, PluginAction action)  { -    return plugin->exec_on_bin(plugin, binary, action); +    return plugin->exec_on_bin(binary, action);  } | 
