diff options
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/pychrysalide/plugin.c | 37 | ||||
| -rw-r--r-- | plugins/python/Makefile.am | 2 | ||||
| -rw-r--r-- | plugins/python/apkfiles/apkfiles.py | 6 | ||||
| -rw-r--r-- | plugins/python/samples/Makefile.am | 9 | ||||
| -rw-r--r-- | plugins/python/samples/__init__.py | 2 | ||||
| -rw-r--r-- | plugins/python/samples/basic_blocks.py | 83 | ||||
| -rw-r--r-- | plugins/python/samples/demo.py | 30 | 
7 files changed, 24 insertions, 145 deletions
| diff --git a/plugins/pychrysalide/plugin.c b/plugins/pychrysalide/plugin.c index f8b4fc8..57891a6 100644 --- a/plugins/pychrysalide/plugin.c +++ b/plugins/pychrysalide/plugin.c @@ -80,7 +80,7 @@ static bool g_python_plugin_read_interface(GPythonPlugin *);  static bool g_python_plugin_do_init(GPythonPlugin *);  /* Procède à l'extinction du greffon. */ -static bool g_python_plugin_do_exit(GPythonPlugin *, GObject *); +static bool g_python_plugin_do_exit(GPythonPlugin *);  /* Procède à une opération liée à un contenu binaire. */  static void g_python_plugin_handle_binary_content(const GPythonPlugin *, PluginAction, GBinContent *, wgroup_id_t, GtkStatusStack *); @@ -557,18 +557,20 @@ static bool g_python_plugin_read_interface(GPythonPlugin *plugin)  static bool g_python_plugin_do_init(GPythonPlugin *plugin)  {      bool result;                            /* Bilan à retourner           */ -    PyObject *args;                         /* Arguments pour l'appel      */      PyObject *value;                        /* Valeur obtenue              */ -    args = Py_None; -    Py_INCREF(args); +    if (!has_python_method(plugin->instance, "init")) +        result = true; -    value = run_python_method(plugin->instance, "init", args); +    else +    { +        value = run_python_method(plugin->instance, "init", NULL); -    result = (value != NULL && PyObject_IsTrue(value)); +        result = (value != NULL && PyObject_IsTrue(value)); -    Py_XDECREF(value); -    Py_DECREF(args); +        Py_XDECREF(value); + +    }      return result; @@ -578,7 +580,6 @@ static bool g_python_plugin_do_init(GPythonPlugin *plugin)  /******************************************************************************  *                                                                             *  *  Paramètres  : plugin = greffon à initialiser.                              * -*                ref    = espace de référencement global.                     *  *                                                                             *  *  Description : Procède à l'extinction du greffon.                           *  *                                                                             * @@ -588,21 +589,23 @@ static bool g_python_plugin_do_init(GPythonPlugin *plugin)  *                                                                             *  ******************************************************************************/ -static bool g_python_plugin_do_exit(GPythonPlugin *plugin, GObject *ref) +static bool g_python_plugin_do_exit(GPythonPlugin *plugin)  {      bool result;                            /* Bilan à retourner           */ -    PyObject *args;                         /* Arguments pour l'appel      */      PyObject *value;                        /* Valeur obtenue              */ -    args = PyTuple_New(1); -    PyTuple_SetItem(args, 0, pygobject_new(ref)); +    if (!has_python_method(plugin->instance, "exit")) +        result = true; -    value = run_python_method(plugin->instance, "exit", args); +    else +    { +        value = run_python_method(plugin->instance, "exit", NULL); -    result = PyObject_IsTrue(value); +        result = (value != NULL && PyObject_IsTrue(value)); -    Py_XDECREF(value); -    Py_DECREF(args); +        Py_XDECREF(value); + +    }      return result; diff --git a/plugins/python/Makefile.am b/plugins/python/Makefile.am index 35f15eb..efbb704 100644 --- a/plugins/python/Makefile.am +++ b/plugins/python/Makefile.am @@ -1,2 +1,2 @@ -SUBDIRS = apkfiles samples +SUBDIRS = apkfiles diff --git a/plugins/python/apkfiles/apkfiles.py b/plugins/python/apkfiles/apkfiles.py index b85b0c8..c45f8c9 100644 --- a/plugins/python/apkfiles/apkfiles.py +++ b/plugins/python/apkfiles/apkfiles.py @@ -14,7 +14,7 @@ class ApkFiles(PluginModule):          desc = { -            'name' : 'Welcome', +            'name' : 'ApkFiles',              'desc' : 'Add suppport for the APK file format',              'version' : '0.1', @@ -25,8 +25,8 @@ class ApkFiles(PluginModule):          return desc -    def init(self, ref): -        """Initialise l'extension.""" +    def init(self): +        """Initialize the plugin."""          return True diff --git a/plugins/python/samples/Makefile.am b/plugins/python/samples/Makefile.am deleted file mode 100644 index 816868c..0000000 --- a/plugins/python/samples/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ - -samplesdir = $(pluginsdir)/python/apkfiles - -samples_DATA = 								\ -	__init__.py								\ -	basic_blocks.py							\ -	demo.py - -EXTRA_DIST = $(samples_DATA) diff --git a/plugins/python/samples/__init__.py b/plugins/python/samples/__init__.py deleted file mode 100644 index 7186d48..0000000 --- a/plugins/python/samples/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ - -from demo import Demo as samples diff --git a/plugins/python/samples/basic_blocks.py b/plugins/python/samples/basic_blocks.py deleted file mode 100644 index 90f3a2c..0000000 --- a/plugins/python/samples/basic_blocks.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -import re -from pychrysalide.analysis import InstrBlock -from pychrysalide.analysis.blocks import FlowBlock - - -class VisitIndent: - -    def __init__(self): -        self.offset = 0 - -    def get_padding(self): -        return '   ' * self.offset - -    def inc_offset(self): -        self.offset = self.offset + 1 - -    def dec_offset(self): -        self.offset = self.offset - 1 - - -def get_c_address_of_pygobject(obj): -    """Parse the string representation of a given object and return its memory address.""" - -    ret = re.match('.*(0x[0-9a-f]+)\)>', str(obj), re.I) - -    if ret == None: -        result = '???' -    else: -        result = ret.group(1) - -    return result - - -def visit_block(block, order, indent): -    """Describe each visited basic block.""" - -    padding = indent.get_padding() -    addr = get_c_address_of_pygobject(block) - -    if isinstance(block, FlowBlock): - -        start, end = block.boundary_addresses -        rank = block.rank -        links = block.get_links_block() - -        if links != None: -            laddr = get_c_address_of_pygobject(links) -            print '%s- flow %s (rank=%d) : 0x%08lx -> 0x%08lx (links = %s)' \ -                % (padding, addr, rank, start, end, laddr) - -        else: -            print '%s- flow %s (rank=%d) : 0x%08lx -> 0x%08lx' \ -                % (padding, addr, rank, start, end) - -    else: - -        if order != InstrBlock.BVO_OUT: - -            print '%s- virtual %s' % (padding, addr) -            indent.inc_offset() - -        else: -            indent.dec_offset() - -    return True - - -def show_basic_blocks(binary): -    """Print the tree of all basic blocks for each routine of a given binary.""" - -    fmt = binary.get_format() -    indent = VisitIndent() - -    for r in fmt.routines: - -        print '==== %s ====' % str(r) - -        r.basic_blocks.visit(visit_block, indent) - -        print diff --git a/plugins/python/samples/demo.py b/plugins/python/samples/demo.py deleted file mode 100644 index c406231..0000000 --- a/plugins/python/samples/demo.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -from pychrysalide import Plugin -from pychrysalide.gui.panels import LogPanel - -from basic_blocks import show_basic_blocks - - -class Demo(Plugin): -    """Demonstration plugin.""" - -    def init(self, ref): -        """Initialize the plugin.""" - -        LogPanel.log_message(LogPanel.LMT_WARNING, 'Welcome to the demo Python plugin !') - -        return True - - -    def get_action(self): -        """Register the plugin for given actions.""" - -        return Plugin.PGA_BINARY_GROUPED - - -    def execute_on_binary(self, binary, action): -        """Process registered actions.""" - -        show_basic_blocks(binary) | 
