diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/debug/debugger.c | 22 | ||||
| -rw-r--r-- | src/debug/debugger.h | 3 | ||||
| -rw-r--r-- | src/debug/debuggers.c | 0 | ||||
| -rw-r--r-- | src/debug/debuggers.h | 0 | ||||
| -rw-r--r-- | src/editor.c | 6 | ||||
| -rw-r--r-- | src/plugins/plugin-def.h | 8 | ||||
| -rw-r--r-- | src/plugins/plugin-int.h | 6 | ||||
| -rw-r--r-- | src/plugins/plugin.c | 23 | ||||
| -rw-r--r-- | src/plugins/plugin.h | 4 | 
9 files changed, 63 insertions, 9 deletions
| diff --git a/src/debug/debugger.c b/src/debug/debugger.c index 6a9c7a2..d08bd26 100644 --- a/src/debug/debugger.c +++ b/src/debug/debugger.c @@ -2,7 +2,7 @@  /* OpenIDA - Outil d'analyse de fichiers binaires   * debugger.c - gestion des différents débogueurs   * - * Copyright (C) 2010-2011 Cyrille Bagard + * Copyright (C) 2010-2012 Cyrille Bagard   *   *  This file is part of OpenIDA.   * @@ -24,8 +24,10 @@  #include "debugger.h"  #include "debugger-int.h" +#include "jdwp/debugger.h"  #include "remgdb/gdb.h"  #include "../gtkext/iodamarshal.h" +#include "../plugins/pglist.h" @@ -112,6 +114,10 @@ GBinaryDebugger *g_new_binary_debugger(DebuggerType type, GOpenidaBinary *binary      switch (type)      { +        case DGT_JDWP: +            result = g_java_debugger_new(binary, NULL); +            break; +          case DGT_REMOTE_GDB:              result = g_gdb_debugger_new(binary, NULL);              break; @@ -145,10 +151,24 @@ GBinaryDebugger *g_new_binary_debugger(DebuggerType type, GOpenidaBinary *binary  bool g_binary_debugger_attach(GBinaryDebugger *debugger)  {      bool result;                            /* Bilan à retourner           */ +    GPluginModule **pglist;                 /* Liste de greffons           */ +    size_t pgcount;                         /* Taille de cette liste       */ +    size_t i;                               /* Boucle de parcours          */      if (debugger->attach == NULL) result = true;      else result = debugger->attach(debugger); +    pglist = get_all_plugins_for_action(PGA_DEBUGGER_ATTACH, &pgcount); + +    if (pgcount > 0) +    { +        for (i = 0; i < pgcount; i++) +            g_plugin_module_handle_debugger(pglist[i], debugger, PGA_DEBUGGER_ATTACH); + +        free(pglist); + +    } +      return result;  } diff --git a/src/debug/debugger.h b/src/debug/debugger.h index 12660eb..f57a9f0 100644 --- a/src/debug/debugger.h +++ b/src/debug/debugger.h @@ -2,7 +2,7 @@  /* OpenIDA - Outil d'analyse de fichiers binaires   * debugger.h - prototypes pour la gestion des différents débogueurs   * - * Copyright (C) 2010-2011 Cyrille Bagard + * Copyright (C) 2010-2012 Cyrille Bagard   *   *  This file is part of OpenIDA.   * @@ -37,6 +37,7 @@  /* Liste de tous les débogueurs */  typedef enum _DebuggerType  { +    DGT_JDWP,                               /* Utilisation du JDWP         */      DGT_REMOTE_GDB,                         /* Utilisation de GDB          */      DGT_PTRACE,                             /* Utilisation de ptrace()     */ diff --git a/src/debug/debuggers.c b/src/debug/debuggers.c deleted file mode 100644 index e69de29..0000000 --- a/src/debug/debuggers.c +++ /dev/null diff --git a/src/debug/debuggers.h b/src/debug/debuggers.h deleted file mode 100644 index e69de29..0000000 --- a/src/debug/debuggers.h +++ /dev/null diff --git a/src/editor.c b/src/editor.c index 728e7ca..757b0c9 100644 --- a/src/editor.c +++ b/src/editor.c @@ -994,15 +994,17 @@ void mcb_debug_start(GtkCheckMenuItem *menuitem, gpointer data) -    debugger = g_new_binary_debugger(DGT_REMOTE_GDB, binary); +    debugger = g_new_binary_debugger(DGT_JDWP, binary);      g_object_set_data(G_OBJECT(data), "current_debugger", debugger); +    // +    g_binary_debugger_attach(debugger);      g_signal_connect(debugger, "debugger-stopped", G_CALLBACK(debugger_stopped_cb), data);      g_signal_connect(debugger, "halted", G_CALLBACK(on_debugger_halted), data); -    g_binary_debugger_run(debugger); +    //    g_binary_debugger_run(debugger);  } diff --git a/src/plugins/plugin-def.h b/src/plugins/plugin-def.h index 67b26d6..0c7ff1c 100644 --- a/src/plugins/plugin-def.h +++ b/src/plugins/plugin-def.h @@ -2,7 +2,7 @@  /* OpenIDA - Outil d'analyse de fichiers binaires   * plugin-def.h - prototypes pour les définitions de base utiles aux greffons   * - * Copyright (C) 2009-2011 Cyrille Bagard + * Copyright (C) 2009-2012 Cyrille Bagard   *   *  This file is part of OpenIDA.   * @@ -27,6 +27,7 @@  #include "../analysis/binary.h" +#include "../debug/debugger.h" @@ -48,7 +49,10 @@ typedef enum _PluginAction      PGA_DISASSEMBLE     = (1 << 1),         /* Désassemblage (non trivial) */ -    PGA_CODE_PROCESS    = (1 << 2)          /* Traitement du code existant */ +    PGA_CODE_PROCESS    = (1 << 2),         /* Traitement du code existant */ + +    PGA_DEBUGGER_ATTACH = (1 << 3),         /* Activation d'un débogueur   */ +    PGA_DEBUGGER_DETACH = (1 << 4)          /* Désactivation d'un débogueur*/  } PluginAction; diff --git a/src/plugins/plugin-int.h b/src/plugins/plugin-int.h index 1ab8d36..a4f3cb6 100644 --- a/src/plugins/plugin-int.h +++ b/src/plugins/plugin-int.h @@ -2,7 +2,7 @@  /* OpenIDA - Outil d'analyse de fichiers binaires   * plugin-int.h - prototypes pour les structures internes des greffons   * - * Copyright (C) 2010-2011 Cyrille Bagard + * Copyright (C) 2010-2012 Cyrille Bagard   *   *  This file is part of OpenIDA.   * @@ -42,6 +42,9 @@ typedef PluginAction (* get_plugin_action_fc) (const GPluginModule *);  /* Identifie un format à associer à un contenu binaire. */  typedef MatchingFormatAction (* is_matching_fc) (const GPluginModule *, char **, bin_t **, off_t *); +/* Exécute une action relative à un débogueur. */ +typedef bool (* execute_on_debugger_fc) (const GPluginModule *, GBinaryDebugger *, PluginAction); +  /* Greffon pour OpenIDA (instance) */  struct _GPluginModule @@ -58,6 +61,7 @@ struct _GPluginModule      is_matching_fc is_matching;             /* Recherche de correspondance */      execute_action_on_binary_fc exec_on_bin;/* Action sur un binaire       */ +    execute_on_debugger_fc handle_debugger; /* Action liée à un débogueur  */  }; diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c index d654df1..7521008 100644 --- a/src/plugins/plugin.c +++ b/src/plugins/plugin.c @@ -2,7 +2,7 @@  /* OpenIDA - Outil d'analyse de fichiers binaires   * plugin.c - interactions avec un greffon donné   * - * Copyright (C) 2009-2011 Cyrille Bagard + * Copyright (C) 2009-2012 Cyrille Bagard   *   *  This file is part of OpenIDA.   * @@ -265,3 +265,24 @@ bool g_plugin_module_execute_action_on_binary(const GPluginModule *plugin, GOpen      return plugin->exec_on_bin(binary, action);  } + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : plugin   = greffon à consulter.                              * +*                debugger = débogueur à l'origine de l'opération.             * +*                action   = action attendue.                                  * +*                                                                             * +*  Description : Exécute une action relative à un débogueur.                  * +*                                                                             * +*  Retour      : true si une action a été menée, false sinon.                 * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +bool g_plugin_module_handle_debugger(const GPluginModule *plugin, GBinaryDebugger *debugger, PluginAction action) +{ +    return plugin->handle_debugger(plugin, debugger, action); + +} diff --git a/src/plugins/plugin.h b/src/plugins/plugin.h index 85b6db9..dbd27fd 100644 --- a/src/plugins/plugin.h +++ b/src/plugins/plugin.h @@ -2,7 +2,7 @@  /* OpenIDA - Outil d'analyse de fichiers binaires   * plugin.h - prototypes pour les interactions avec un greffon donné   * - * Copyright (C) 2009-2011 Cyrille Bagard + * Copyright (C) 2009-2012 Cyrille Bagard   *   *  This file is part of OpenIDA.   * @@ -63,6 +63,8 @@ MatchingFormatAction g_plugin_module_is_matching(const GPluginModule *, char **,  /* Exécute une action définie sur un binaire chargé. */  bool g_plugin_module_execute_action_on_binary(const GPluginModule *, GOpenidaBinary *, PluginAction); +/* Exécute une action relative à un débogueur. */ +bool g_plugin_module_handle_debugger(const GPluginModule *, GBinaryDebugger *, PluginAction); | 
