diff options
| author | Cyrille Bagard <nocbos@gmail.com> | 2012-02-01 01:14:01 (GMT) | 
|---|---|---|
| committer | Cyrille Bagard <nocbos@gmail.com> | 2012-02-01 01:14:01 (GMT) | 
| commit | 14e82ed268cb78d62bbba93357fede5ece5c4f7d (patch) | |
| tree | 76e146d4dcf7b6db67b51eb8f75a6c5e76bf6896 /plugins/pyoida | |
| parent | eacb69625d51707ac0a158815a53f71fb70968ce (diff) | |
Provided interfaces to use debuggers in plugins.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@231 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'plugins/pyoida')
| -rw-r--r-- | plugins/pyoida/plugin.c | 88 | 
1 files changed, 80 insertions, 8 deletions
diff --git a/plugins/pyoida/plugin.c b/plugins/pyoida/plugin.c index d7deecb..9bcec8e 100644 --- a/plugins/pyoida/plugin.c +++ b/plugins/pyoida/plugin.c @@ -2,7 +2,7 @@  /* OpenIDA - Outil d'analyse de fichiers binaires   * plugin.c - interactions avec un greffon Python   * - * Copyright (C) 2010-2011 Cyrille Bagard + * Copyright (C) 2010-2012 Cyrille Bagard   *   *  This file is part of OpenIDA.   * @@ -75,6 +75,11 @@ static MatchingFormatAction g_python_plugin_is_matching(const GPythonPlugin *, c  static bool g_python_plugin_execute(GPythonPlugin *, GOpenidaBinary *, PluginAction); +/* Exécute une action relative à un débogueur. */ +static bool g_python_plugin_handle_debugger(const GPythonPlugin *, GBinaryDebugger *, PluginAction); + + +  /* ------------------------- MODULE PYTHON POUR LES SCRIPTS ------------------------- */ @@ -108,6 +113,10 @@ static PyObject *pyoida_plugin_get_action(PyObject *, PyObject *);  static PyObject *pyoida_plugin_is_matching(PyObject *, PyObject *); +/* Exécute une action relative à un débogueur. */ +static PyObject *pyoida_plugin_handle_debugger(PyObject *, PyObject *); + + @@ -239,6 +248,7 @@ static void g_python_plugin_init(GPythonPlugin *plugin)      plugin_parent = G_PLUGIN_MODULE(plugin);      plugin_parent->exec_on_bin = (execute_action_on_binary_fc)g_python_plugin_execute; +    plugin_parent->handle_debugger = (execute_on_debugger_fc)g_python_plugin_handle_debugger;  } @@ -470,13 +480,6 @@ static MatchingFormatAction g_python_plugin_is_matching(const GPythonPlugin *plu - - - - - - -  /******************************************************************************  *                                                                             *  *  Paramètres  : plugin = greffon de prise en charge à utiliser.              * @@ -531,6 +534,48 @@ static bool g_python_plugin_execute(GPythonPlugin *plugin, GOpenidaBinary *binar +/****************************************************************************** +*                                                                             * +*  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   : -                                                            * +*                                                                             * +******************************************************************************/ + +static bool g_python_plugin_handle_debugger(const GPythonPlugin *plugin, GBinaryDebugger *debugger, PluginAction action) +{ +    bool result;                            /* Bilan à remonter            */ +    PyObject *args;                         /* Arguments pour l'appel      */ +    PyObject *value;                        /* Valeurs obtenues            */ + +    args = PyTuple_New(2); + +    PyTuple_SetItem(args, 0, Py_None); +    PyTuple_SetItem(args, 1, PyInt_FromLong(action)); + +    value = run_python_method(plugin->instance, "handle_debugger", args); + +    result = (value == Py_True); + +    Py_XDECREF(value); +    Py_DECREF(args); + +    return result; + +} + + + + + + +  /* ---------------------------------------------------------------------------------- */  /*                           MODULE PYTHON POUR LES SCRIPTS                           */  /* ---------------------------------------------------------------------------------- */ @@ -596,6 +641,12 @@ static bool pyoida_plugin_define_constants(PyObject *dict)      ret = PyDict_SetItemString(dict, "PGA_CODE_PROCESS", PyInt_FromLong(PGA_CODE_PROCESS));      if (ret == -1) return false; +    ret = PyDict_SetItemString(dict, "PGA_DEBUGGER_ATTACH", PyInt_FromLong(PGA_DEBUGGER_ATTACH)); +    if (ret == -1) return false; + +    ret = PyDict_SetItemString(dict, "PGA_DEBUGGER_DETACH", PyInt_FromLong(PGA_DEBUGGER_DETACH)); +    if (ret == -1) return false; +      /* PGA_FORMAT_MATCHER */      ret = PyDict_SetItemString(dict, "MFA_NONE", PyInt_FromLong(MFA_NONE)); @@ -662,6 +713,24 @@ static PyObject *pyoida_plugin_is_matching(PyObject *self, PyObject *args) +/****************************************************************************** +*                                                                             * +*  Paramètres  : self = classe assurant le lien avec l'éditeur de messages.   * +*                args = arguments fournis à l'appel.                          * +*                                                                             * +*  Description : Exécute une action relative à un débogueur.                  * +*                                                                             * +*  Retour      : True en équivalent Python.                                   * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static PyObject *pyoida_plugin_handle_debugger(PyObject *self, PyObject *args) +{ +    Py_RETURN_TRUE; + +}  /****************************************************************************** @@ -712,6 +781,9 @@ static PyMethodDef pyoida_plugin_methods[] = {      { "is_matching", (PyCFunction)pyoida_plugin_is_matching, METH_VARARGS,       "Define if the given file can be handled."      }, +    { "handle_debugger", (PyCFunction)pyoida_plugin_handle_debugger, METH_VARARGS, +     "Be notify about debugger attaching or detaching." +    },      { "run", (PyCFunction)pyoida_plugin_run, METH_VARARGS,       "Run the plugin for a specific action."      },  | 
