diff options
30 files changed, 2058 insertions, 734 deletions
@@ -1,3 +1,55 @@ +14-06-25 Cyrille Bagard <nocbos@gmail.com> + + * configure.ac: + Update version and look for python3 + pygobject-3.0. + + * plugins/pychrysa/analysis/binaries/file.c: + * plugins/pychrysa/analysis/binaries/file.h: + * plugins/pychrysa/analysis/binaries/module.c: + * plugins/pychrysa/analysis/binaries/module.h: + * plugins/pychrysa/analysis/binary.c: + * plugins/pychrysa/analysis/binary.h: + * plugins/pychrysa/analysis/Makefile.am: + * plugins/pychrysa/analysis/module.c: + * plugins/pychrysa/analysis/module.h: + * plugins/pychrysa/arch/archbase.h: + * plugins/pychrysa/arch/instruction.c: + * plugins/pychrysa/arch/Makefile.am: + * plugins/pychrysa/arch/module.c: + * plugins/pychrysa/arch/module.h: + Build the first steps to upgrade to Python3. + + * plugins/pychrysa/arch/vmpa.c: + * plugins/pychrysa/arch/vmpa.h: + New entries: copy some definitions from <arch/vmpa.h>. + + * plugins/pychrysa/Makefile.am: + Define a new name for the Python extension. + + * plugins/pychrysa/pychrysa.c: + * plugins/pychrysa/pychrysa.h: + + * plugins/pychrysa/quirks.c: + Do not include an old header anymore. + + * po/fr.po: + * po/POTFILES.in: + Update the list of processed files. + + * src/analysis/binaries/file.c: + * src/analysis/binaries/file.h: + Give access to the binary filename. + + * src/arch/Makefile.am: + Add the 'vmpa.[ch] files to libarch_la_SOURCES. + + * src/arch/vmpa.c: + * src/arch/vmpa.h: + New entries: introduce a new type for addresses. + + * src/gtkext/gtkdockstation.c: + Disable calls to configuration, due to the Python shared object. + 14-06-05 Cyrille Bagard <nocbos@gmail.com> * src/gtkext/gtkbufferview.c: diff --git a/configure.ac b/configure.ac index 7982079..e318ba4 100644 --- a/configure.ac +++ b/configure.ac @@ -5,13 +5,13 @@ ############################################################ AC_PREREQ(2.59) -AC_INIT([openida], [0.3.11], [nocbos@gmail.com]) +AC_INIT([chrysalide], [0.3.78], [nocbos@gmail.com]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE AM_SILENT_RULES -AM_GNU_GETTEXT_VERSION([0.17]) +AM_GNU_GETTEXT_VERSION([0.18.3]) AM_GNU_GETTEXT([external]) AC_CONFIG_SRCDIR([src/editor.c]) @@ -219,23 +219,23 @@ AC_SUBST(LIBSQLITE_LIBS) #--- Checks for Python if test "x$enable_debug" = "xyes"; then - LIBPYTHON_CFLAGS=`python-dbg-config --cflags` - LIBPYTHON_LIBS=`python-dbg-config --libs` + LIBPYTHON_CFLAGS=`python3-dbg-config --cflags` + LIBPYTHON_LIBS=`python3-dbg-config --libs` else - LIBPYTHON_CFLAGS=`python-config --cflags` - LIBPYTHON_LIBS=`python-config --libs` + LIBPYTHON_CFLAGS=`python3-config --cflags` + LIBPYTHON_LIBS=`python3-config --libs` fi AC_SUBST(LIBPYTHON_CFLAGS) AC_SUBST(LIBPYTHON_LIBS) -#--- Checks for pygobject-2.0 +#--- Checks for pygobject-3.0 -PKG_CHECK_MODULES(LIBPYGOBJECT,pygobject-2.0 >= 2.21.1,[libpygobject_found=yes],[libpygobject_found=no]) +PKG_CHECK_MODULES(LIBPYGOBJECT,pygobject-3.0 >= 3.12.1,[libpygobject_found=yes],[libpygobject_found=no]) if test "$libpygobject_found" = "yes"; then - libpygobject_version=`pkg-config pygobject-2.0 --modversion` + libpygobject_version=`pkg-config pygobject-3.0 --modversion` else libpygobject_version='-' fi diff --git a/plugins/pychrysa/Makefile.am b/plugins/pychrysa/Makefile.am index 3032c0e..8664193 100644 --- a/plugins/pychrysa/Makefile.am +++ b/plugins/pychrysa/Makefile.am @@ -1,5 +1,5 @@ -pkglib_LTLIBRARIES = pychrysa.la +pkglib_LTLIBRARIES = pychrysa.la pychrysalide.la pychrysa_la_SOURCES = \ helpers.h helpers.c \ @@ -22,6 +22,20 @@ pychrysa_la_LDFLAGS = -module -avoid-version $(LIBGTK_LIBS) $(LIBXML_LIBS) $(LIB -L../../src/plugins/.libs -lplugins +pychrysalide_la_SOURCES = \ + pychrysa.h pychrysa.c + +pychrysalide_la_LIBADD = \ + analysis/libpychrysaanalysis.la \ + arch/libpychrysaarch.la + +pychrysalide_la_LDFLAGS = -module -avoid-version \ + $(LIBPYTHON_LIBS) $(LIBSQLITE_LIBS) $(LIBARCHIVE_LIBS) \ + -L../../src/.libs -lchrysadisass -lchrysagtkext \ + -L../../src/plugins/.libs -lplugins + + + AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_CFLAGS) $(LIBPYGOBJECT_CFLAGS) \ -I../../src diff --git a/plugins/pychrysa/analysis/Makefile.am b/plugins/pychrysa/analysis/Makefile.am index f970d94..9b9ac18 100644 --- a/plugins/pychrysa/analysis/Makefile.am +++ b/plugins/pychrysa/analysis/Makefile.am @@ -3,14 +3,21 @@ noinst_LTLIBRARIES = libpychrysaanalysis.la libpychrysaanalysis_la_SOURCES = \ binary.h binary.c \ - block.h block.c \ - module.h module.c \ - roptions.h roptions.c \ - routine.h routine.c + module.h module.c libpychrysaanalysis_la_LIBADD = \ - binaries/libpychrysaanalysisbinaries.la \ - blocks/libpychrysaanalysisblocks.la + binaries/libpychrysaanalysisbinaries.la + +# libpychrysaanalysis_la_SOURCES = \ +# binary.h binary.c \ +# block.h block.c \ +# module.h module.c \ +# roptions.h roptions.c \ +# routine.h routine.c + +# libpychrysaanalysis_la_LIBADD = \ +# binaries/libpychrysaanalysisbinaries.la \ +# blocks/libpychrysaanalysisblocks.la libpychrysaanalysis_la_LDFLAGS = diff --git a/plugins/pychrysa/analysis/binaries/file.c b/plugins/pychrysa/analysis/binaries/file.c index 2b2a460..28bfecb 100644 --- a/plugins/pychrysa/analysis/binaries/file.c +++ b/plugins/pychrysa/analysis/binaries/file.c @@ -25,20 +25,21 @@ #include "file.h" - #include <pygobject.h> #include <analysis/binaries/file.h> +#include "../binary.h" -/* Crée un nouvel objet Python de type 'FileBinary'. */ -static PyObject *py_file_binary_new(PyTypeObject *, PyObject *, PyObject *); - +/* Crée un nouvel objet Python de type 'BinaryFile'. */ +static PyObject *py_binary_file_new(PyTypeObject *, PyObject *, PyObject *); +/* Fournit le chemin d'accès au binaire représenté. */ +static PyObject *py_binary_file_get_filename(PyObject *, void *); @@ -48,7 +49,7 @@ static PyObject *py_file_binary_new(PyTypeObject *, PyObject *, PyObject *); * args = arguments fournis à l'appel. * * kwds = arguments de type key=val fournis. * * * -* Description : Crée un nouvel objet Python de type 'FileBinary'. * +* Description : Crée un nouvel objet Python de type 'BinaryFile'. * * * * Retour : Instance Python mise en place. * * * @@ -56,7 +57,7 @@ static PyObject *py_file_binary_new(PyTypeObject *, PyObject *, PyObject *); * * ******************************************************************************/ -static PyObject *py_file_binary_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +static PyObject *py_binary_file_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { PyObject *result; /* Instance à retourner */ char *filename; /* Nom du fichier à charger */ @@ -69,74 +70,121 @@ static PyObject *py_file_binary_new(PyTypeObject *type, PyObject *args, PyObject binary = g_file_binary_new_from_file(filename); result = pygobject_new(G_OBJECT(binary)); - //g_object_unref(binary); + g_object_unref(binary); return result; } +/****************************************************************************** +* * +* Paramètres : self = NULL car méthode statique. * +* closure = non utilisé ici. * +* * +* Description : Fournit le chemin d'accès au binaire représenté. * +* * +* Retour : Chemin d'accès en Python. * +* * +* Remarques : - * +* * +******************************************************************************/ +static PyObject *py_binary_file_get_filename(PyObject *self, void *closure) +{ + const GFileBinary *file; /* Fichier binaire concerné */ + const char *filename; /* Chemin d'accès à diffuser */ + + file = G_FILE_BINARY(pygobject_get(self)); + filename = g_file_binary_get_filename(file, true); + return PyUnicode_FromString(filename); + +} /****************************************************************************** * * -* Paramètres : module = module dont la définition est à compléter. * +* Paramètres : - * * * -* Description : Prend en charge l'objet 'pychrysalide.analysis.LoadedBinary'.* +* Description : Fournit un accès à une définition de type à diffuser. * * * -* Retour : Bilan de l'opération. * +* Retour : Définition d'objet pour Python. * * * * Remarques : - * * * ******************************************************************************/ -bool register_python_file_binary(PyObject *module) +PyTypeObject *get_python_binary_file_type(void) { - PyObject *parent_mod; /* Module Python-LoadedBinary */ - int ret; /* Bilan d'un appel */ - - static PyMethodDef py_file_binary_methods[] = { + static PyMethodDef py_binary_file_methods[] = { { NULL } }; - static PyGetSetDef py_file_binary_getseters[] = { + static PyGetSetDef py_binary_file_getseters[] = { + { + "filename", py_binary_file_get_filename, NULL, + "Show the filename of the loaded binary file.", NULL + }, { NULL } }; - static PyTypeObject py_file_binary_type = { + static PyTypeObject py_binary_file_type = { - PyObject_HEAD_INIT(NULL) + PyVarObject_HEAD_INIT(NULL, 0) - .tp_name = "pychrysalide.analysis.binaries.FileBinary", + .tp_name = "pychrysalide.analysis.binaries.BinaryFile", .tp_basicsize = sizeof(PyGObject), - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_flags = Py_TPFLAGS_DEFAULT, - .tp_doc = "PyChrysalide file binary", + .tp_doc = "PyChrysalide binary file", - .tp_methods = py_file_binary_methods, - .tp_getset = py_file_binary_getseters, - .tp_new = (newfunc)py_file_binary_new + .tp_methods = py_binary_file_methods, + .tp_getset = py_binary_file_getseters, + .tp_new = (newfunc)py_binary_file_new }; - parent_mod = PyImport_ImportModule("pychrysalide.analysis"); - if (parent_mod == NULL) return false; + return &py_binary_file_type; + +} + + +/****************************************************************************** +* * +* Paramètres : module = module dont la définition est à compléter. * +* * +* Description : Prend en charge l'objet 'pychrysalide.analysis.LoadedBinary'.* +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool register_python_binary_file(PyObject *module) +{ + PyTypeObject *py_binary_file_type; /* Type Python 'LoadedBinary' */ + int ret; /* Bilan d'un appel */ + PyObject *dict; /* Dictionnaire du module */ + + py_binary_file_type = get_python_binary_file_type(); - py_file_binary_type.tp_base = (PyTypeObject *)PyObject_GetAttrString(parent_mod, "LoadedBinary"); - Py_DECREF(parent_mod); + py_binary_file_type->tp_base = get_python_loaded_binary_type(); + py_binary_file_type->tp_basicsize = py_binary_file_type->tp_base->tp_basicsize; - if (PyType_Ready(&py_file_binary_type) < 0) + if (PyType_Ready(py_binary_file_type) < 0) return false; - Py_INCREF(&py_file_binary_type); - ret = PyModule_AddObject(module, "FileBinary", (PyObject *)&py_file_binary_type); + Py_INCREF(py_binary_file_type); + ret = PyModule_AddObject(module, "BinaryFile", (PyObject *)py_binary_file_type); + if (ret != 0) return false; - pygobject_register_class(module, "GFileBinary", G_TYPE_FILE_BINARY, &py_file_binary_type, - Py_BuildValue("(O)", py_file_binary_type.tp_base)); + dict = PyModule_GetDict(module); + pygobject_register_class(dict, "BinaryFile", G_TYPE_FILE_BINARY, py_binary_file_type, + Py_BuildValue("(O)", py_binary_file_type->tp_base)); - return (ret == 0); + return true; } diff --git a/plugins/pychrysa/analysis/binaries/file.h b/plugins/pychrysa/analysis/binaries/file.h index 2ba9ed0..b381379 100644 --- a/plugins/pychrysa/analysis/binaries/file.h +++ b/plugins/pychrysa/analysis/binaries/file.h @@ -31,8 +31,11 @@ -/* Prend en charge l'objet 'pychrysalide.analysis.binaries.FileBinary'. */ -bool register_python_file_binary(PyObject *); +/* Fournit un accès à une définition de type à diffuser. */ +PyTypeObject *get_python_binary_file_type(void); + +/* Prend en charge l'objet 'pychrysalide.analysis.binaries.BinaryFile'. */ +bool register_python_binary_file(PyObject *); diff --git a/plugins/pychrysa/analysis/binaries/module.c b/plugins/pychrysa/analysis/binaries/module.c index aae0a33..c2adddf 100644 --- a/plugins/pychrysa/analysis/binaries/module.c +++ b/plugins/pychrysa/analysis/binaries/module.c @@ -41,25 +41,50 @@ * * ******************************************************************************/ -bool add_binaries_module_to_python_module(PyObject *super) +bool add_analysis_binaries_module_to_python_module(PyObject *super) { - bool result; - PyObject *module; + bool result; /* Bilan à retourner */ + PyObject *module; /* Sous-module mis en place */ int ret; /* Bilan d'un appel */ - static PyMethodDef py_format_methods[] = { - { NULL } + static PyModuleDef py_chrysalide_arch_module = { + + .m_base = PyModuleDef_HEAD_INIT, + + .m_name = "pychrysalide.analysis.binaries", + .m_doc = "Python module for Chrysalide.analysis.binaries", + + .m_size = -1, + }; - module = Py_InitModule("pychrysalide.analysis.binaries", py_format_methods); + result = false; + + module = PyModule_Create(&py_chrysalide_arch_module); if (module == NULL) return false; + ret = PyState_AddModule(super, &py_chrysalide_arch_module); + if (ret != 0) goto aabmtpm_exit; + + ret = _PyImport_FixupBuiltin(module, "pychrysalide.analysis.binaries"); + if (ret != 0) goto aabmtpm_exit; + Py_INCREF(module); - ret = PyModule_AddObject(super, "pychrysalide.analysis.binaries", module); + ret = PyModule_AddObject(super, "binaries", module); + if (ret != 0) goto aabmtpm_exit; + + result = true; + + result &= register_python_binary_file(module); + + aabmtpm_exit: - result = (ret == 0); + if (!result) + { + printf("something went wrong in %s...\n", __FUNCTION__); + /* ... */ - result &= register_python_file_binary(module); + } return result; diff --git a/plugins/pychrysa/analysis/binaries/module.h b/plugins/pychrysa/analysis/binaries/module.h index 1fd62d0..653f7da 100644 --- a/plugins/pychrysa/analysis/binaries/module.h +++ b/plugins/pychrysa/analysis/binaries/module.h @@ -32,7 +32,7 @@ /* Ajoute le module 'binaries' au module Python. */ -bool add_binaries_module_to_python_module(PyObject *); +bool add_analysis_binaries_module_to_python_module(PyObject *); diff --git a/plugins/pychrysa/analysis/binary.c b/plugins/pychrysa/analysis/binary.c index c570cf9..807df7e 100644 --- a/plugins/pychrysa/analysis/binary.c +++ b/plugins/pychrysa/analysis/binary.c @@ -28,6 +28,105 @@ #include <pygobject.h> + + + + + + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Fournit un accès à une définition de type à diffuser. * +* * +* Retour : Définition d'objet pour Python. * +* * +* Remarques : - * +* * +******************************************************************************/ + +PyTypeObject *get_python_loaded_binary_type(void) +{ + static PyTypeObject py_loaded_binary_type = { + + PyVarObject_HEAD_INIT(NULL, 0) + + .tp_name = "pychrysalide.analysis.LoadedBinary", + + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + + .tp_doc = "PyChrysalide loaded binary", + + }; + + return &py_loaded_binary_type; + +} + + + +#include <analysis/binary.h> + + + + +/****************************************************************************** +* * +* Paramètres : module = module dont la définition est à compléter. * +* * +* Description : Prend en charge l'objet 'pychrysalide.arch.loaded_binary'. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool register_python_loaded_binary(PyObject *module) +{ + PyTypeObject *py_loaded_binary_type; /* Type Python 'LoadedBinary' */ + int ret; /* Bilan d'un appel */ + PyObject *dict; /* Dictionnaire du module */ + + py_loaded_binary_type = get_python_loaded_binary_type(); + + py_loaded_binary_type->tp_base = &PyGObject_Type; + py_loaded_binary_type->tp_basicsize = py_loaded_binary_type->tp_base->tp_basicsize; + + if (PyType_Ready(py_loaded_binary_type) != 0) + return false; + + Py_INCREF(py_loaded_binary_type); + ret = PyModule_AddObject(module, "LoadedBinary", (PyObject *)py_loaded_binary_type); + if (ret != 0) return false; + + dict = PyModule_GetDict(module); + pygobject_register_class(dict, "LoadedBinary", G_TYPE_LOADED_BINARY, py_loaded_binary_type, + Py_BuildValue("(O)", py_loaded_binary_type->tp_base)); + + return true; + +} + + + + + + + + + + + + +#if 0 + + +#include <pygobject.h> + + #include <analysis/binary.h> @@ -258,3 +357,6 @@ bool register_python_loaded_binary(PyObject *module) return (ret == 0); } + +#endif + diff --git a/plugins/pychrysa/analysis/binary.h b/plugins/pychrysa/analysis/binary.h index cb78024..83ea7c7 100644 --- a/plugins/pychrysa/analysis/binary.h +++ b/plugins/pychrysa/analysis/binary.h @@ -31,6 +31,9 @@ +/* Fournit un accès à une définition de type à diffuser. */ +PyTypeObject *get_python_loaded_binary_type(void); + /* Prend en charge l'objet 'pychrysalide.analysis.LoadedBinary'. */ bool register_python_loaded_binary(PyObject *); diff --git a/plugins/pychrysa/analysis/module.c b/plugins/pychrysa/analysis/module.c index 54509a8..e13c8f8 100644 --- a/plugins/pychrysa/analysis/module.c +++ b/plugins/pychrysa/analysis/module.c @@ -26,6 +26,97 @@ #include "binary.h" +#include "binaries/module.h" + + + +/****************************************************************************** +* * +* Paramètres : module = module dont la définition est à compléter. * +* * +* Description : Ajoute le module 'analysis' au module Python. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool add_analysis_module_to_python_module(PyObject *super) +{ + bool result; /* Bilan à retourner */ + PyObject *module; /* Sous-module mis en place */ + int ret; /* Bilan d'un appel */ + + static PyModuleDef py_chrysalide_arch_module = { + + .m_base = PyModuleDef_HEAD_INIT, + + .m_name = "pychrysalide.analysis", + .m_doc = "Python module for Chrysalide.analysis", + + .m_size = -1, + + }; + + result = false; + + module = PyModule_Create(&py_chrysalide_arch_module); + if (module == NULL) return false; + + ret = PyState_AddModule(super, &py_chrysalide_arch_module); + if (ret != 0) goto aamtpm_exit; + + ret = _PyImport_FixupBuiltin(module, "pychrysalide.analysis"); + if (ret != 0) goto aamtpm_exit; + + Py_INCREF(module); + ret = PyModule_AddObject(super, "analysis", module); + if (ret != 0) goto aamtpm_exit; + + result = true; + + result &= register_python_loaded_binary(module); + + result &= add_analysis_binaries_module_to_python_module(module); + + aamtpm_exit: + + if (!result) + { + printf("something went wrong in %s...\n", __FUNCTION__); + /* ... */ + + } + + return result; + +} + + + + + + + + + + + + + + + + + + + + + + + +#if 0 +#include "binary.h" #include "block.h" #include "routine.h" #include "binaries/module.h" @@ -72,3 +163,4 @@ bool add_analysis_module_to_python_module(PyObject *super) return result; } +#endif diff --git a/plugins/pychrysa/analysis/module.h b/plugins/pychrysa/analysis/module.h index 0ff1167..bc4a65e 100644 --- a/plugins/pychrysa/analysis/module.h +++ b/plugins/pychrysa/analysis/module.h @@ -22,8 +22,8 @@ */ -#ifndef _PLUGINS_PYOIDA_ANALYSIS_MODULE_H -#define _PLUGINS_PYOIDA_ANALYSIS_MODULE_H +#ifndef _PLUGINS_PYCHRYSALIDE_ANALYSIS_MODULE_H +#define _PLUGINS_PYCHRYSALIDE_ANALYSIS_MODULE_H #include <Python.h> @@ -36,4 +36,4 @@ bool add_analysis_module_to_python_module(PyObject *); -#endif /* _PLUGINS_PYOIDA_ANALYSIS_MODULE_H */ +#endif /* _PLUGINS_PYCHRYSALIDE_ANALYSIS_MODULE_H */ diff --git a/plugins/pychrysa/arch/Makefile.am b/plugins/pychrysa/arch/Makefile.am index a01d570..54b9261 100644 --- a/plugins/pychrysa/arch/Makefile.am +++ b/plugins/pychrysa/arch/Makefile.am @@ -2,10 +2,14 @@ noinst_LTLIBRARIES = libpychrysaarch.la libpychrysaarch_la_SOURCES = \ - archbase.h archbase.c \ - instruction.h instruction.c \ module.h module.c \ - processor.h processor.c + vmpa.h vmpa.c + +# libpychrysaarch_la_SOURCES = \ +# archbase.h archbase.c \ +# instruction.h instruction.c \ +# module.h module.c \ +# processor.h processor.c libpychrysaarch_la_LDFLAGS = diff --git a/plugins/pychrysa/arch/archbase.h b/plugins/pychrysa/arch/archbase.h index 8721371..b5d9811 100644 --- a/plugins/pychrysa/arch/archbase.h +++ b/plugins/pychrysa/arch/archbase.h @@ -1,8 +1,8 @@ /* Chrysalide - Outil d'analyse de fichiers binaires - * archbase.h - prototypes pour l'équivalent Python du fichier "arch/archbase.h" + * vmpa.h - prototypes pour l'équivalent Python du fichier "arch/vmpa.h" * - * Copyright (C) 2010-2012 Cyrille Bagard + * Copyright (C) 2014 Cyrille Bagard * * This file is part of Chrysalide. * @@ -22,11 +22,19 @@ */ -#ifndef _PLUGINS_PYOIDA_ARCH_ARCHBASE_H -#define _PLUGINS_PYOIDA_ARCH_ARCHBASE_H +#ifndef _PLUGINS_PYCHRYSA_ARCH_VMPA_H +#define _PLUGINS_PYCHRYSA_ARCH_VMPA_H + #include <Python.h> + + + + + + +#if 0 #include <stdbool.h> #include <arch/archbase.h> @@ -38,7 +46,9 @@ PyObject *py_vmpa_new_from_existing(vmpa_t); /* Ajoute l'objet 'arch.vmpa' au module Python. */ bool add_arch_vmpa_to_python_module(PyObject *); +#endif + -#endif /* _PLUGINS_PYOIDA_ARCH_ARCHBASE_H */ +#endif /* _PLUGINS_PYCHRYSA_ARCH_VMPA_H */ diff --git a/plugins/pychrysa/arch/instruction.c b/plugins/pychrysa/arch/instruction.c index 685d82f..efbdaa5 100644 --- a/plugins/pychrysa/arch/instruction.c +++ b/plugins/pychrysa/arch/instruction.c @@ -223,7 +223,7 @@ bool register_python_arch_instruction_iterator(PyObject *module) .tp_dealloc = (destructor)py_arch_instruction_iterator_dealloc, - .tp_flags = Py_TPFLAGS_HAVE_ITER | Py_TPFLAGS_HAVE_CLASS, + //.tp_flags = Py_TPFLAGS_HAVE_ITER | Py_TPFLAGS_HAVE_CLASS, .tp_doc = "PyChrysalide architecture instruction iterator", diff --git a/plugins/pychrysa/arch/module.c b/plugins/pychrysa/arch/module.c index 7e8fcb3..92172e0 100644 --- a/plugins/pychrysa/arch/module.c +++ b/plugins/pychrysa/arch/module.c @@ -25,9 +25,7 @@ #include "module.h" -#include "instruction.h" - - +#include "vmpa.h" @@ -45,28 +43,49 @@ bool add_arch_module_to_python_module(PyObject *super) { - bool result; - PyObject *module; + bool result; /* Bilan à retourner */ + PyObject *module; /* Sous-module mis en place */ int ret; /* Bilan d'un appel */ - static PyMethodDef py_arch_methods[] = { - { NULL } + static PyModuleDef py_chrysalide_arch_module = { + + .m_base = PyModuleDef_HEAD_INIT, + + .m_name = "pychrysalide.arch", + .m_doc = "Python module for Chrysalide.arch", + + .m_size = -1, + }; - module = Py_InitModule("pychrysalide.arch", py_arch_methods); + result = false; + + module = PyModule_Create(&py_chrysalide_arch_module); if (module == NULL) return false; + ret = PyState_AddModule(super, &py_chrysalide_arch_module); + if (ret != 0) goto aamtpm_exit; + + ret = _PyImport_FixupBuiltin(module, "pychrysalide.arch"); + if (ret != 0) goto aamtpm_exit; Py_INCREF(module); - ret = PyModule_AddObject(super, "pychrysalide.arch", module); + ret = PyModule_AddObject(super, "arch", module); + if (ret != 0) goto aamtpm_exit; + + result = true; + + result &= register_python_vmpa(module); - result = (ret == 0); + aamtpm_exit: - if (ret != 0) /* ... */; + if (!result) + { + printf("something went wrong in %s...\n", __FUNCTION__); + /* ... */ - result &= register_python_arch_instruction(module); - result &= register_python_arch_instruction_iterator(module); + } - return true; + return result; } diff --git a/plugins/pychrysa/arch/module.h b/plugins/pychrysa/arch/module.h index 8017f76..403ec8a 100644 --- a/plugins/pychrysa/arch/module.h +++ b/plugins/pychrysa/arch/module.h @@ -22,8 +22,8 @@ */ -#ifndef _PLUGINS_PYOIDA_ARCH_MODULE_H -#define _PLUGINS_PYOIDA_ARCH_MODULE_H +#ifndef _PLUGINS_PYCHRYSALIDE_ARCH_MODULE_H +#define _PLUGINS_PYCHRYSALIDE_ARCH_MODULE_H #include <Python.h> @@ -36,4 +36,4 @@ bool add_arch_module_to_python_module(PyObject *); -#endif /* _PLUGINS_PYOIDA_ARCH_MODULE_H */ +#endif /* _PLUGINS_PYCHRYSALIDE_ARCH_MODULE_H */ diff --git a/plugins/pychrysa/arch/vmpa.c b/plugins/pychrysa/arch/vmpa.c new file mode 100644 index 0000000..b429699 --- /dev/null +++ b/plugins/pychrysa/arch/vmpa.c @@ -0,0 +1,325 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * vmpa.c - équivalent Python du fichier "arch/vmpa.c" + * + * Copyright (C) 2014 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * OpenIDA is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * OpenIDA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "vmpa.h" + + +#include <src/arch/vmpa.h> + + + + + + + +typedef struct _py_vmpa_t +{ + PyObject_HEAD + + vmpa2_t addr; + +} py_vmpa_t; + + + + +/* Fournit une représentation d'une variable 'vmpa_t'. */ +static PyObject *py_vmpa_to_str(PyObject *); + + + + +/* Effectue une conversion d'un objet Python en type 'vmpa_t'. */ +static bool convert_pyobj_to_vmpa(PyObject *, vmpa2_t *); + +/* Effectue une opération de type 'add' avec le type 'vmpa'. */ +static PyObject *py_vmpa_nb_add(PyObject *, PyObject *); + + + + + +/****************************************************************************** +* * +* Paramètres : obj = objet Python à traiter. * +* * +* Description : Fournit une représentation d'une variable 'vmpa_t'. * +* * +* Retour : Chaîne de caractère pour Python. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static PyObject *py_vmpa_to_str(PyObject *obj) +{ + vmpa2_t *addr; + + addr = &((py_vmpa_t *)obj)->addr; + + return PyUnicode_FromFormat("<phy=%d, virt=0x%08x>", addr->physical, addr->virtual); + +} + + + + + + + +/****************************************************************************** +* * +* Paramètres : obj = objet Python à tenter de convertir. * +* addr = structure équivalente pour Chrysalide. * +* * +* Description : Effectue une conversion d'un objet Python en type 'vmpa_t'. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static bool convert_pyobj_to_vmpa(PyObject *obj, vmpa2_t *addr) +{ + bool result; /* Résulats à retourner */ + PyTypeObject *py_vmpa_type; /* Type Python pour 'vmpa' */ + int ret; /* Bilan d'un appel */ + PY_LONG_LONG value; /* Valeur de type générique */ + int overflow; /* Détection d'une grosse val. */ + + result = false; + + py_vmpa_type = get_python_vmpa_type(); + + ret = PyObject_IsInstance(obj, (PyObject *)py_vmpa_type); + + /* S'il n'y a rien à faire... */ + if (ret == 1) + { + *addr = ((py_vmpa_t *)obj)->addr; + result = true; + } + + /* Sinon on demande à Python... */ + else + { + value = PyLong_AsLongLongAndOverflow(obj, &overflow); + + if (value == -1 && (overflow == 1 || PyErr_Occurred())) + PyErr_Clear(); + + else + { + init_vmpa(addr, value, value); + result = true; + } + + } + + return result; + +} + + + + +/****************************************************************************** +* * +* Paramètres : o1 = premier élément concerné par l'opération. * +* o2 = second élément concerné par l'opération. * +* * +* Description : Effectue une opération de type 'add' avec le type 'vmpa'. * +* * +* Retour : Résultat de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static PyObject *py_vmpa_nb_add(PyObject *o1, PyObject *o2) +{ + PyObject *result; /* Résultat à retourner */ + vmpa2_t addr1; /* Première adresse à traiter */ + vmpa2_t addr2; /* Seconde adresse à traiter */ + PyTypeObject *py_vmpa_type; /* Type Python pour 'vmpa' */ + + if (!convert_pyobj_to_vmpa(o1, &addr1)) + return NULL; + + if (!convert_pyobj_to_vmpa(o2, &addr2)) + return NULL; + + py_vmpa_type = get_python_vmpa_type(); + + result = PyObject_CallObject((PyObject *)py_vmpa_type, NULL); + + init_vmpa(&((py_vmpa_t *)result)->addr, + addr1.physical + addr2.physical, + addr1.virtual + addr2.virtual); + + return result; + +} + + + + +void log_simple_message(/*LogMessageType*/ int type, const char *msg) +{ + +} + + +void log_variadic_message(/*LogMessageType*/ int type, const char *fmt, ...) +{ + + +} + + +void change_editor_items_current_view_content(void/*GtkViewPanel*/ *view) +{ + + +} + + + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Fournit un accès à une définition de type à diffuser. * +* * +* Retour : Définition d'objet pour Python. * +* * +* Remarques : - * +* * +******************************************************************************/ + +PyTypeObject *get_python_vmpa_type(void) +{ + static PyNumberMethods py_vmpa_nb_proto = { + + .nb_add = py_vmpa_nb_add, + + /* + binaryfunc nb_add; + binaryfunc nb_subtract; + binaryfunc nb_multiply; + binaryfunc nb_remainder; + binaryfunc nb_divmod; + ternaryfunc nb_power; + unaryfunc nb_negative; + unaryfunc nb_positive; + unaryfunc nb_absolute; + inquiry nb_bool; + unaryfunc nb_invert; + binaryfunc nb_lshift; + binaryfunc nb_rshift; + binaryfunc nb_and; + binaryfunc nb_xor; + binaryfunc nb_or; + unaryfunc nb_int; + void *nb_reserved; + unaryfunc nb_float; + + binaryfunc nb_inplace_add; + binaryfunc nb_inplace_subtract; + binaryfunc nb_inplace_multiply; + binaryfunc nb_inplace_remainder; + ternaryfunc nb_inplace_power; + binaryfunc nb_inplace_lshift; + binaryfunc nb_inplace_rshift; + binaryfunc nb_inplace_and; + binaryfunc nb_inplace_xor; + binaryfunc nb_inplace_or; + + binaryfunc nb_floor_divide; + binaryfunc nb_true_divide; + binaryfunc nb_inplace_floor_divide; + binaryfunc nb_inplace_true_divide; + + unaryfunc nb_index; + + */ + + }; + + static PyTypeObject py_vmpa_type = { + + PyVarObject_HEAD_INIT(NULL, 0) + + .tp_name = "pychrysalide.arch.vmpa", + .tp_basicsize = sizeof(py_vmpa_t), + + .tp_as_number = &py_vmpa_nb_proto, + + .tp_str = py_vmpa_to_str, + + .tp_flags = Py_TPFLAGS_DEFAULT, + + .tp_doc = "Python object for vmpa_t" + + }; + + return &py_vmpa_type; + +} + + + + +/****************************************************************************** +* * +* Paramètres : module = module dont la définition est à compléter. * +* * +* Description : Prend en charge l'objet 'pychrysalide.arch.vmpa'. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool register_python_vmpa(PyObject *module) +{ + PyTypeObject *py_vmpa_type; /* Type Python pour 'vmpa' */ + int ret; /* Bilan d'un appel */ + + py_vmpa_type = get_python_vmpa_type(); + + py_vmpa_type->tp_new = PyType_GenericNew; + + if (PyType_Ready(py_vmpa_type) != 0) + return false; + + Py_INCREF(py_vmpa_type); + ret = PyModule_AddObject(module, "vmpa", (PyObject *)py_vmpa_type); + + return (ret == 0); + +} diff --git a/plugins/pychrysa/arch/vmpa.h b/plugins/pychrysa/arch/vmpa.h new file mode 100644 index 0000000..6ee00b2 --- /dev/null +++ b/plugins/pychrysa/arch/vmpa.h @@ -0,0 +1,42 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * vmpa.h - prototypes pour l'équivalent Python du fichier "arch/vmpa.h" + * + * Copyright (C) 2014 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * OpenIDA is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * OpenIDA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#ifndef _PLUGINS_PYCHRYSALIDE_ARCH_VMPA_H +#define _PLUGINS_PYCHRYSALIDE_ARCH_VMPA_H + + +#include <Python.h> +#include <stdbool.h> + + + +/* Fournit un accès à une définition de type à diffuser. */ +PyTypeObject *get_python_vmpa_type(void); + +/* Prend en charge l'objet 'pychrysalide.arch.vmpa'. */ +bool register_python_vmpa(PyObject *); + + + +#endif /* _PLUGINS_PYCHRYSALIDE_ARCH_VMPA_H */ diff --git a/plugins/pychrysa/pychrysa.c b/plugins/pychrysa/pychrysa.c index f2dbf0f..865c0fc 100644 --- a/plugins/pychrysa/pychrysa.c +++ b/plugins/pychrysa/pychrysa.c @@ -24,10 +24,12 @@ #include "pychrysa.h" +#if 0 + #include <dirent.h> #include <pygobject.h> #include <string.h> -#include <pygtk/pygtk.h> +//#include <pygtk/pygtk.h> #include <config.h> @@ -252,8 +254,33 @@ PluginAction get_plugin_action(const GPluginModule *plugin) * * ******************************************************************************/ -PyMODINIT_FUNC PyInit_pychrysa(void) +PyMODINIT_FUNC initpychrysa/*PyInit_pychrysa*/(void) { + PyObject *module; + + //init_pygobject(); + //init_pygtk(); + + pychrysalide_init_quirks(); + + module = Py_InitModule("pychrysalide", SpamMethods); + + //add_analysis_roptions_to_python_module(module); + add_analysis_module_to_python_module(module); + add_arch_module_to_python_module(module); + add_debug_module_to_python_module(module); + add_format_module_to_python_module(module); + add_glibext_module_to_python_module(module); + add_gtkext_module_to_python_module(module); + add_gui_module_to_python_module(module); + + add_plugin_to_python_module(module); + + + /* + + + static struct PyModuleDef spammodule = { PyModuleDef_HEAD_INIT, "pychrysalide", @@ -264,6 +291,8 @@ PyMODINIT_FUNC PyInit_pychrysa(void) PyModule_Create(&spammodule); + */ + } #else @@ -305,3 +334,149 @@ PyMODINIT_FUNC initpychrysa(void) } #endif + + + +#endif + + + + + + + +#include <pygobject.h> + + +#include "../../revision.h" + + +#include "analysis/module.h" +#include "arch/module.h" + + + +// TODO : à bouger ? +#include "../../src/arch/processor.h" +#include "../../src/format/format.h" + + + +/* Fournit la version du programme global. */ +static PyObject *py_chrysalide_version(PyObject *, PyObject *); + + + + +/****************************************************************************** +* * +* Paramètres : self = NULL car méthode statique. * +* args = non utilisé ici. * +* * +* Description : Fournit la version du programme global. * +* * +* Retour : Numéro de révision. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static PyObject *py_chrysalide_version(PyObject *self, PyObject *args) +{ + char version[16]; + int major; + int minor; + int revision; + + major = REVISION / 1000; + minor = (REVISION - (major * 1000)) / 100; + revision = REVISION % 100; + + snprintf(version, sizeof(version), "%d.%d.%d", major, minor, revision); + + return PyUnicode_FromString(version); + +} + + + + + + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Point d'entrée pour l'initialisation de Python. * +* * +* Retour : ? * +* * +* Remarques : - * +* * +******************************************************************************/ + +PyMODINIT_FUNC PyInit_pychrysalide(void) +{ + PyObject *result; /* Module Python à retourner */ + PyObject *pygobj_mod; /* Module Python-GObject */ + bool status; /* Bilan des inclusions */ + + static PyMethodDef py_chrysalide_methods[] = { + + { "version", py_chrysalide_version, + METH_NOARGS, + "Provide the revision number of Chrysalide." + }, + { "python", py_chrysalide_version, + METH_NOARGS, + "Provide the revision number of Chrysalide module for Python." + }, + { NULL } + + }; + + static PyModuleDef py_chrysalide_module = { + + .m_base = PyModuleDef_HEAD_INIT, + + .m_name = "pychrysalide", + .m_doc = "Python module for Chrysalide", + + .m_size = -1, + + .m_methods = py_chrysalide_methods + + }; + + + // TODO : à bouger ! + init_all_processors(); + init_all_formats(); + + + if (pygobject_init(-1, -1, -1) == NULL) + return NULL; + + /** + * Pour une raison non identifiée, si le module n'est pas préchargé, + * le flot d'exécution plante dans la fonction insertdict() de Objects/dictobject.c:818. + */ + pygobj_mod = PyImport_ImportModule("gi.repository.GObject"); + if (pygobj_mod == NULL) + return NULL; + + result = PyModule_Create(&py_chrysalide_module); + + status = true; + + status &= add_analysis_module_to_python_module(result); + status &= add_arch_module_to_python_module(result); + + printf("status :: %d\n", status); + + /* TODO : if !status... */ + + return result; + +} diff --git a/plugins/pychrysa/pychrysa.h b/plugins/pychrysa/pychrysa.h index 5897abe..0fdc074 100644 --- a/plugins/pychrysa/pychrysa.h +++ b/plugins/pychrysa/pychrysa.h @@ -25,7 +25,23 @@ #define _PLUGINS_PYCHRYSA_H +/** + * Note: + * Since Python may define some pre-processor definitions which affect the standard headers + * on some systems, you must include Python.h before any standard headers are included. + * + * cf. https://docs.python.org/3.4/c-api/intro.html + */ #include <Python.h> + + + + + + +#if 0 + + #include <glib-object.h> #include <stdbool.h> @@ -50,7 +66,8 @@ PluginAction get_plugin_action(const GPluginModule *); #if PY_VERSION_HEX >= 0x03000000 /* Point d'entrée pour l'initialisation de Python. */ -PyMODINIT_FUNC PyInit_pychrysa(void); +//PyMODINIT_FUNC PyInit_pychrysa(void); +PyMODINIT_FUNC initpychrysa(void); #else @@ -59,6 +76,14 @@ PyMODINIT_FUNC initpychrysa(void); #endif +#endif + + + + +/* Point d'entrée pour l'initialisation de Python. */ +PyMODINIT_FUNC PyInit_pychrysalide(void); + #endif /* _PLUGINS_PYCHRYSA_H */ diff --git a/plugins/pychrysa/quirks.c b/plugins/pychrysa/quirks.c index 64d7bf2..4aa8536 100644 --- a/plugins/pychrysa/quirks.c +++ b/plugins/pychrysa/quirks.c @@ -26,7 +26,7 @@ -#include <pyglib.h> +//#include <pyglib.h> #include <pygobject.h> diff --git a/po/POTFILES.in b/po/POTFILES.in index d51c766..a8ebdcc 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,296 +1,344 @@ -src/plugins/plugin.c -src/plugins/pglist.c -src/plugins/pyoida/py_log.c -src/plugins/pyoida/py_binary.c -src/plugins/pyoida/pyoida.c -src/plugins/pyoida/py_line.c src/plugins/context.c +src/plugins/pglist.c +src/plugins/plugin.c src/plugins/overjump/overjump.c -src/debug/jdwp/tcp.c -src/debug/jdwp/sets/list.c -src/debug/jdwp/sets/vm.c -src/debug/jdwp/sets/thread.c -src/debug/jdwp/packet.c -src/debug/jdwp/misc/location.c -src/debug/jdwp/misc/id.c -src/debug/jdwp/misc/header.c -src/debug/jdwp/misc/types.c -src/debug/jdwp/debugger.c -src/debug/break.c -src/debug/packet.c -src/debug/stream.c -src/debug/remgdb/tcp.c -src/debug/remgdb/helpers.c -src/debug/remgdb/packet.c -src/debug/remgdb/stream.c -src/debug/remgdb/gdb.c -src/debug/debugger.c -src/analysis/decomp/decompiler.c -src/analysis/line_prologue.c -src/analysis/routine.c -src/analysis/binary.c -src/analysis/line.c -src/analysis/variable.c -src/analysis/line_comment.c -src/analysis/type.c -src/analysis/line_code.c -src/analysis/disass/output.c -src/analysis/disass/fetch.c -src/analysis/disass/links.c -src/analysis/disass/disassembler.c -src/analysis/exporter.c -src/analysis/roptions.c -src/dialogs/plugins.c -src/dialogs/about.c -src/dialogs/binparts.c -src/dialogs/add_shellcode.c -src/dialogs/export.c -src/xdg.c -src/decomp/output.c -src/decomp/expr/cond.c -src/decomp/expr/return.c -src/decomp/expr/pseudo.c -src/decomp/expr/array.c -src/decomp/expr/dalvik/array.c -src/decomp/expr/assign.c -src/decomp/expr/immediate.c -src/decomp/expr/arithm.c -src/decomp/expr/call.c -src/decomp/expr/block.c -src/decomp/instruction.c -src/decomp/instr/ite.c -src/decomp/context.c -src/decomp/expression.c -src/decomp/lang/java.c -src/decomp/lang/asm.c -src/panel/panels.c -src/panel/log.c -src/panel/symbols.c -src/panel/strings.c -src/panel/registers.c -src/glibext/gbufferline.c -src/glibext/gcodebuffer.c -src/glibext/delayed.c -src/glibext/gnhash.c -src/glibext/gbuffersegment.c -src/dlg_sections.c -src/gui/editem.c -src/gui/menus/file.c -src/gui/menus/view.c -src/gui/menus/binary.c -src/gui/menus/menubar.c -src/gui/menus/help.c -src/gui/menus/project.c -src/gui/menus/debug.c -src/gui/panels/log.c -src/gui/panels/symbols.c -src/gui/panels/panel.c -src/gui/tb/toolbar.c -src/gui/tb/source.c -src/configuration.c -src/format/dwarf/dwarf.c -src/format/dwarf/abbrev.c -src/format/dwarf/utils.c -src/format/dwarf/info.c -src/format/dwarf/d_dwarf.c -src/format/elf/section.c -src/format/elf/elf.c -src/format/elf/helper_x86.c -src/format/elf/symbols.c -src/format/elf/helper_mips.c -src/format/elf/strings.c -src/format/elf/program.c -src/format/elf/elf-int.c -src/format/executable.c -src/format/mangling/libjavamangling_la-java_tok.c -src/format/mangling/itanium_gram.c -src/format/mangling/demangler.c -src/format/mangling/context.c -src/format/mangling/libjavamangling_la-java_gram.c -src/format/mangling/itanium_tok.c -src/format/symbol.c -src/format/exe_format.c -src/format/part.c -src/format/java/java-int.c -src/format/java/e_java.c -src/format/java/java.c -src/format/java/method.c -src/format/java/pool.c -src/format/java/field.c -src/format/java/attribute.c -src/format/dex/dex.c -src/format/dex/method.c -src/format/dex/pool.c -src/format/dex/class.c -src/format/dex/dex-int.c -src/format/format.c -src/format/dbg_format.c -src/format/pe/pe-int.c -src/format/pe/section.c -src/format/pe/symbols.c -src/format/pe/pe.c +src/common/net.c src/common/xml.c +src/common/fnv1a.c +src/common/endianness.c +src/common/xdg.c +src/common/io.c src/common/leb128.c +src/common/dllist.c src/common/extstr.c src/common/environment.c -src/common/net.c -src/common/endianness.c -src/common/dllist.c -src/editor.c -src/main.c -src/params.c -src/project.c -src/graph/node.c -src/graph/layout.c -src/graph/dot.c -src/panels/glimpse.c -src/panels/breaks.c -src/panels/strings.c -src/panels/panel.c -src/panels/registers.c -src/arch/artificial.c +src/arch/processor.c src/arch/operand.c -src/arch/x86/op_movs.c -src/arch/x86/op_hlt.c -src/arch/x86/operand.c -src/arch/x86/op_jump.c -src/arch/x86/op_xor.c -src/arch/x86/op_stos.c -src/arch/x86/op_mov.c -src/arch/x86/op_scas.c -src/arch/x86/op_push.c -src/arch/x86/op_sbb.c -src/arch/x86/op_nop.c -src/arch/x86/op_not.c -src/arch/x86/op_test.c -src/arch/x86/op_dec.c -src/arch/x86/op_call.c -src/arch/x86/op_shl.c -src/arch/x86/op_or.c -src/arch/x86/op_rcr.c -src/arch/x86/instruction.c -src/arch/x86/op_cld.c -src/arch/x86/op_sar.c -src/arch/x86/op_ror.c -src/arch/x86/op_inc.c -src/arch/x86/op_ret.c -src/arch/x86/op_cmps.c -src/arch/x86/op_shr.c -src/arch/x86/op_arpl.c -src/arch/x86/processor.c -src/arch/x86/op_lea.c -src/arch/x86/op_set.c -src/arch/x86/op_rol.c -src/arch/x86/op_int.c -src/arch/x86/registers.c -src/arch/x86/op_pop.c -src/arch/x86/op_add.c -src/arch/x86/op_cmp.c -src/arch/x86/op_adc.c -src/arch/x86/op_xchg.c -src/arch/x86/op_mul.c -src/arch/x86/op_and.c -src/arch/x86/op_rcl.c -src/arch/x86/op_movsx.c -src/arch/x86/op_sub.c -src/arch/x86/op_movzx.c -src/arch/x86/op_leave.c +src/arch/context.c +src/arch/register.c +src/arch/archbase.c +src/arch/dalvik/processor.c src/arch/dalvik/operand.c -src/arch/dalvik/decomp/aget.c -src/arch/dalvik/decomp/aput.c -src/arch/dalvik/decomp/array.c -src/arch/dalvik/decomp/const.c -src/arch/dalvik/decomp/if.c -src/arch/dalvik/decomp/arithm.c -src/arch/dalvik/decomp/ret.c -src/arch/dalvik/decomp/invoke.c -src/arch/dalvik/opcodes/mul.c +src/arch/dalvik/pseudo/switch.c +src/arch/dalvik/pseudo/fill.c +src/arch/dalvik/context.c +src/arch/dalvik/register.c +src/arch/dalvik/opcodes/ret.c src/arch/dalvik/opcodes/check.c -src/arch/dalvik/opcodes/xor.c -src/arch/dalvik/opcodes/aget.c -src/arch/dalvik/opcodes/aput.c +src/arch/dalvik/opcodes/div.c +src/arch/dalvik/opcodes/shr.c +src/arch/dalvik/opcodes/rsub.c src/arch/dalvik/opcodes/array.c -src/arch/dalvik/opcodes/rem.c -src/arch/dalvik/opcodes/or.c -src/arch/dalvik/opcodes/sput.c +src/arch/dalvik/opcodes/const.c src/arch/dalvik/opcodes/switch.c -src/arch/dalvik/opcodes/add.c -src/arch/dalvik/opcodes/rsub.c -src/arch/dalvik/opcodes/iget.c -src/arch/dalvik/opcodes/sub.c -src/arch/dalvik/opcodes/cmp.c +src/arch/dalvik/opcodes/iput.c src/arch/dalvik/opcodes/sget.c +src/arch/dalvik/opcodes/or.c src/arch/dalvik/opcodes/new.c -src/arch/dalvik/opcodes/to.c +src/arch/dalvik/opcodes/aput.c +src/arch/dalvik/opcodes/xor.c +src/arch/dalvik/opcodes/iget.c +src/arch/dalvik/opcodes/nop.c src/arch/dalvik/opcodes/goto.c -src/arch/dalvik/opcodes/const.c +src/arch/dalvik/opcodes/aget.c +src/arch/dalvik/opcodes/ushr.c +src/arch/dalvik/opcodes/cmp.c +src/arch/dalvik/opcodes/monitor.c +src/arch/dalvik/opcodes/rem.c +src/arch/dalvik/opcodes/to.c src/arch/dalvik/opcodes/and.c -src/arch/dalvik/opcodes/shr.c -src/arch/dalvik/opcodes/shl.c -src/arch/dalvik/opcodes/iput.c +src/arch/dalvik/opcodes/instanceof.c src/arch/dalvik/opcodes/if.c -src/arch/dalvik/opcodes/move.c -src/arch/dalvik/opcodes/ret.c -src/arch/dalvik/opcodes/nop.c -src/arch/dalvik/opcodes/div.c -src/arch/dalvik/opcodes/ushr.c +src/arch/dalvik/opcodes/mul.c +src/arch/dalvik/opcodes/throw.c +src/arch/dalvik/opcodes/sput.c +src/arch/dalvik/opcodes/add.c +src/arch/dalvik/opcodes/shl.c src/arch/dalvik/opcodes/invoke.c +src/arch/dalvik/opcodes/not.c +src/arch/dalvik/opcodes/move.c +src/arch/dalvik/opcodes/sub.c +src/arch/dalvik/opcodes/neg.c +src/arch/dalvik/decomp/ret.c +src/arch/dalvik/decomp/array.c +src/arch/dalvik/decomp/const.c +src/arch/dalvik/decomp/switch.c +src/arch/dalvik/decomp/iput.c +src/arch/dalvik/decomp/new.c +src/arch/dalvik/decomp/aput.c +src/arch/dalvik/decomp/iget.c +src/arch/dalvik/decomp/aget.c +src/arch/dalvik/decomp/arithm.c +src/arch/dalvik/decomp/if.c +src/arch/dalvik/decomp/invoke.c +src/arch/dalvik/decomp/move.c src/arch/dalvik/instruction.c -src/arch/dalvik/pseudo/switch.c -src/arch/dalvik/pseudo/fill.c -src/arch/dalvik/register.c -src/arch/dalvik/processor.c -src/arch/dalvik/operands/args.c src/arch/dalvik/operands/target.c src/arch/dalvik/operands/register.c src/arch/dalvik/operands/pool.c -src/arch/dalvik/context.c -src/arch/mips/operand.c -src/arch/mips/op_jump.c -src/arch/mips/op_nop.c -src/arch/mips/instruction.c -src/arch/mips/op_branch.c -src/arch/mips/op_store.c -src/arch/mips/processor.c -src/arch/mips/registers.c -src/arch/mips/op_load.c -src/arch/mips/op_add.c -src/arch/mips/op_sr.c -src/arch/mips/op_and.c -src/arch/mips/op_sub.c -src/arch/instruction.c -src/arch/archbase.c -src/arch/jvm/operand.c +src/arch/dalvik/operands/args.c +src/arch/immediate.c +src/arch/arm/processor.c +src/arch/arm/v456/register.c +src/arch/arm/v456/addressing.c +src/arch/arm/v456/instruction.c +src/arch/arm/v456/operands/register.c +src/arch/arm/v456/operands/content.c +src/arch/arm/instruction.c +src/arch/jvm/processor.c src/arch/jvm/op_const.c +src/arch/jvm/op_add.c +src/arch/jvm/op_pop.c +src/arch/jvm/operand.c +src/arch/jvm/op_monitor.c +src/arch/jvm/op_store.c src/arch/jvm/op_dup.c +src/arch/jvm/op_getput.c +src/arch/jvm/op_invoke.c +src/arch/jvm/op_load.c +src/arch/jvm/op_convert.c src/arch/jvm/op_nop.c src/arch/jvm/instruction.c -src/arch/jvm/op_convert.c -src/arch/jvm/op_getput.c -src/arch/jvm/op_store.c src/arch/jvm/op_ret.c -src/arch/jvm/processor.c -src/arch/jvm/op_pop.c -src/arch/jvm/op_load.c -src/arch/jvm/op_add.c -src/arch/jvm/op_invoke.c -src/arch/jvm/op_monitor.c -src/arch/immediate.c -src/arch/processor.c -src/arch/context.c -src/arch/arm/processor.c -src/gtkext/gtkbinview.c -src/gtkext/gtkdropwindow.c -src/gtkext/gtkdockitem.c -src/gtkext/gtkviewpanel.c -src/gtkext/easygtk.c +src/arch/artificial.c +src/arch/instruction.c +src/arch/mips/processor.c +src/arch/mips/op_add.c +src/arch/mips/operand.c +src/arch/mips/op_store.c +src/arch/mips/op_sub.c +src/arch/mips/op_sr.c +src/arch/mips/op_branch.c +src/arch/mips/op_load.c +src/arch/mips/op_nop.c +src/arch/mips/instruction.c +src/arch/mips/registers.c +src/arch/mips/op_jump.c +src/arch/mips/op_and.c +src/arch/x86/processor.c +src/arch/x86/operand.c +src/arch/x86/register.c +src/arch/x86/opcodes/ret.c +src/arch/x86/opcodes/shr.c +src/arch/x86/opcodes/cld.c +src/arch/x86/opcodes/set.c +src/arch/x86/opcodes/movsx.c +src/arch/x86/opcodes/stos.c +src/arch/x86/opcodes/movzx.c +src/arch/x86/opcodes/rcr.c +src/arch/x86/opcodes/pop.c +src/arch/x86/opcodes/push.c +src/arch/x86/opcodes/int.c +src/arch/x86/opcodes/lea.c +src/arch/x86/opcodes/dec.c +src/arch/x86/opcodes/or.c +src/arch/x86/opcodes/rcl.c +src/arch/x86/opcodes/sbb.c +src/arch/x86/opcodes/cmps.c +src/arch/x86/opcodes/xor.c +src/arch/x86/opcodes/test.c +src/arch/x86/opcodes/nop.c +src/arch/x86/opcodes/jump.c +src/arch/x86/opcodes/ror.c +src/arch/x86/opcodes/sar.c +src/arch/x86/opcodes/mov.c +src/arch/x86/opcodes/hlt.c +src/arch/x86/opcodes/cmp.c +src/arch/x86/opcodes/and.c +src/arch/x86/opcodes/adc.c +src/arch/x86/opcodes/scas.c +src/arch/x86/opcodes/mul.c +src/arch/x86/opcodes/arpl.c +src/arch/x86/opcodes/rol.c +src/arch/x86/opcodes/call.c +src/arch/x86/opcodes/movs.c +src/arch/x86/opcodes/add.c +src/arch/x86/opcodes/leave.c +src/arch/x86/opcodes/shl.c +src/arch/x86/opcodes/not.c +src/arch/x86/opcodes/inc.c +src/arch/x86/opcodes/xchg.c +src/arch/x86/opcodes/sub.c +src/arch/x86/instruction.c +src/arch/x86/operands/register.c +src/arch/x86/operands/relative.c +src/arch/x86/operands/moffs.c +src/arch/x86/operands/modrm.c +src/arch/x86/operands/data.c +src/gui/tb/source.c +src/gui/tb/portions.c +src/gui/tb/toolbar.c +src/gui/panels/panel.c +src/gui/panels/symbols.c +src/gui/panels/glance.c +src/gui/panels/welcome.c +src/gui/panels/strings.c +src/gui/panels/log.c +src/gui/status.c +src/gui/editem.c +src/gui/menus/binary.c +src/gui/menus/debug.c +src/gui/menus/help.c +src/gui/menus/edition.c +src/gui/menus/view.c +src/gui/menus/menubar.c +src/gui/menus/file.c +src/gui/menus/project.c +src/glibext/gbuffersegment.c +src/glibext/gbinportion.c +src/glibext/gcodebuffer.c +src/glibext/chrysamarshal.c +src/glibext/delayed.c +src/glibext/gbufferline.c +src/glibext/gnhash.c +src/panels/breaks.c +src/panels/panel.c +src/panels/strings.c +src/panels/registers.c +src/params.c +src/debug/break.c +src/debug/packet.c +src/debug/remgdb/packet.c +src/debug/remgdb/helpers.c +src/debug/remgdb/tcp.c +src/debug/remgdb/stream.c +src/debug/remgdb/gdb.c +src/debug/jdwp/packet.c +src/debug/jdwp/sets/thread.c +src/debug/jdwp/sets/vm.c +src/debug/jdwp/sets/list.c +src/debug/jdwp/tcp.c +src/debug/jdwp/debugger.c +src/debug/jdwp/misc/header.c +src/debug/jdwp/misc/id.c +src/debug/jdwp/misc/location.c +src/debug/jdwp/misc/types.c +src/debug/stream.c +src/debug/debugger.c +src/decomp/instr/keyword.c +src/decomp/instr/switch.c +src/decomp/instr/ite.c +src/decomp/context.c +src/decomp/expression.c +src/decomp/output.c +src/decomp/instruction.c +src/decomp/lang/java.c +src/decomp/lang/asm.c +src/decomp/expr/array.c +src/decomp/expr/dalvik/array.c +src/decomp/expr/access.c +src/decomp/expr/immediate.c +src/decomp/expr/cond.c +src/decomp/expr/assign.c +src/decomp/expr/pseudo.c +src/decomp/expr/arithm.c +src/decomp/expr/block.c +src/decomp/expr/call.c +src/decomp/expr/text.c +src/decomp/expr/return.c +src/decomp/expr/comp.c +src/format/dwarf/abbrev.c +src/format/dwarf/dwarf.c +src/format/dwarf/utils.c +src/format/dwarf/info.c +src/format/dwarf/d_dwarf.c +src/format/mangling/context.c +src/format/mangling/demangler.c +src/format/mangling/libjavamangling_la-java_gram.c +src/format/mangling/itanium/abi.c +src/format/mangling/itanium/context.c +src/format/mangling/itanium/component.c +src/format/mangling/libjavamangling_la-java_tok.c +src/format/executable.c +src/format/part.c +src/format/dbg_format.c +src/format/pe/pe.c +src/format/pe/symbols.c +src/format/pe/section.c +src/format/pe/pe-int.c +src/format/exe_format.c +src/format/symbol.c +src/format/dex/method.c +src/format/dex/dex.c +src/format/dex/dex-int.c +src/format/dex/pool.c +src/format/dex/class.c +src/format/elf/program.c +src/format/elf/helper_mips.c +src/format/elf/symbols.c +src/format/elf/elf.c +src/format/elf/elf-int.c +src/format/elf/section.c +src/format/elf/strings.c +src/format/elf/helper_x86.c +src/format/format.c +src/format/java/attribute.c +src/format/java/field.c +src/format/java/method.c +src/format/java/java.c +src/format/java/e_java.c +src/format/java/pool.c +src/format/java/java-int.c +src/dlg_sections.c +src/analysis/binary.c +src/analysis/disass/rank.c +src/analysis/disass/output.c +src/analysis/disass/macro.c +src/analysis/disass/loop.c +src/analysis/disass/fetch.c +src/analysis/disass/limit.c +src/analysis/disass/links.c +src/analysis/disass/disassembler.c +src/analysis/blocks/virtual.c +src/analysis/blocks/raccess.c +src/analysis/blocks/flow.c +src/analysis/decomp/decompiler.c +src/analysis/decomp/il.c +src/analysis/decomp/cmerge.c +src/analysis/decomp/reduce.c +src/analysis/type.c +src/analysis/db/collection.c +src/analysis/db/cdb.c +src/analysis/db/bookmark.c +src/analysis/db/client.c +src/analysis/db/core.c +src/analysis/db/server.c +src/analysis/roptions.c +src/analysis/block.c +src/analysis/routine.c +src/analysis/variable.c +src/analysis/binaries/file.c +src/analysis/types/encaps.c +src/analysis/types/cse.c +src/analysis/types/literal.c +src/analysis/types/template.c +src/analysis/types/basic.c +src/dialogs/about.c +src/dialogs/binparts.c +src/dialogs/export.c +src/dialogs/storage.c +src/dialogs/goto.c +src/dialogs/shellcode.c +src/dialogs/plugins.c src/gtkext/gtkdockstation.c +src/gtkext/gtklinkrenderer.c +src/gtkext/easygtk.c +src/gtkext/gtksourceview.c +src/gtkext/gtkbinarystrip.c +src/gtkext/gtkblockview.c src/gtkext/gtkbufferview.c -src/gtkext/gtkdockpanel.c src/gtkext/gtkextstatusbar.c -src/gtkext/gtkgraphview.c -src/gtkext/gtksourceview.c src/gtkext/support.c -src/gtkext/iodamarshal.c -src/gtkext/gtkblockview.c -src/gtkext/gtklinkrenderer.c +src/gtkext/gtkviewpanel.c +src/gtkext/gtkgraphview.c +src/gtkext/graph/nodes/virtual.c +src/gtkext/graph/nodes/flow.c +src/gtkext/graph/ranks.c +src/gtkext/graph/layout.c +src/gtkext/graph/dot.c +src/gtkext/graph/edge.c +src/gtkext/graph/node.c +src/main.c +src/project.c +src/configuration.c +src/editor.c @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: openida 0.0.1\n" "Report-Msgid-Bugs-To: nocbos@gmail.com\n" -"POT-Creation-Date: 2012-07-08 13:15+0200\n" +"POT-Creation-Date: 2014-06-14 10:29+0200\n" "PO-Revision-Date: 2010-11-04 16:11+0100\n" "Last-Translator: cyrille <nocbos@gmail.com>\n" "Language-Team: French\n" @@ -17,621 +17,795 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/plugins/pyoida/py_log.c:118 -msgid "Invalid type of message" +#: src/plugins/pglist.c:283 +#, c-format +msgid "Initialization of plugin '%s' failed !" msgstr "" -#: src/debug/jdwp/tcp.c:191 +#: src/plugins/plugin.c:176 #, c-format -msgid "Error while connecting to the JDWP server at %s:%s." -msgstr "Erreur lors de la connexion au serveur JDWP sur %s:%s." +msgid "Error while loading the plugin candidate '%s' : %s" +msgstr "" -#: src/debug/jdwp/tcp.c:197 +#: src/plugins/plugin.c:184 #, c-format -msgid "Connected to %s:%hd." -msgstr "Connecté à %s:%hd." +msgid "No 'get_plugin_name' entry in plugin candidate '%s'" +msgstr "" -#: src/debug/jdwp/tcp.c:215 -msgid "Failure in the first JDWP handshake." -msgstr "Echec des premiers échanges JDWP." +#: src/plugins/plugin.c:244 +#, c-format +msgid "Loaded the '<b>%s</b>' from the '<b>%s</b>' directory" +msgstr "" -#: src/debug/jdwp/debugger.c:213 +#: src/arch/dalvik/operands/pool.c:207 src/arch/dalvik/operands/pool.c:209 #, c-format -msgid "The debugger is '%s' (JRE %d.%d; VM %s)." -msgstr "Le débogueur est '%s' (JRE %d.%d ; VM %s)." +msgid "<bad string index (%d)>" +msgstr "" -#: src/analysis/decomp/decompiler.c:77 -msgid "Binary data decompiled by Chrysalide" -msgstr "Données binaires décompilées par Chrysalide" +#: src/arch/dalvik/operands/pool.c:234 src/arch/dalvik/operands/pool.c:236 +#, c-format +msgid "<bad type index (%d)>" +msgstr "" -#: src/analysis/decomp/decompiler.c:81 src/analysis/disass/disassembler.c:314 -msgid "Chrysalide is free software - © 2008-2012 Cyrille Bagard" -msgstr "Chrysalide est un Logiciel Libre - © 2008-2012 Cyrille Bagard" +#: src/arch/dalvik/operands/pool.c:265 src/arch/dalvik/operands/pool.c:267 +#, c-format +msgid "<bad field index (%d)>" +msgstr "" -#: src/analysis/decomp/decompiler.c:90 -msgid "whole binary" +#: src/arch/dalvik/operands/pool.c:292 src/arch/dalvik/operands/pool.c:294 +#, c-format +msgid "<bad method index (%d)>" msgstr "" -#: src/analysis/decomp/decompiler.c:92 src/analysis/decomp/decompiler.c:95 -#: src/analysis/disass/disassembler.c:322 -#: src/analysis/disass/disassembler.c:325 src/dialogs/export.c:311 -msgid "File: " -msgstr "Fichier: " +#: src/gui/tb/source.c:85 +msgid " Source: " +msgstr "" -#: src/analysis/binary.c:357 -msgid "default" +#: src/gui/tb/source.c:116 +msgid "Source files" msgstr "" -#: src/analysis/binary.c:416 -#, c-format -msgid "Opening '%s' file..." +#: src/gui/tb/portions.c:132 +msgid "Portions" msgstr "" -#: src/analysis/binary.c:429 -msgid "Unknown binary format" +#: src/gui/panels/symbols.c:218 +msgid "List" msgstr "" -#: src/analysis/binary.c:437 -msgid "Detected architecture: ARM" +#: src/gui/panels/symbols.c:221 +msgid "Show symbols using a list view" msgstr "" -#: src/analysis/binary.c:440 -msgid "Detected architecture: Dalvik Virtual Machine" +#: src/gui/panels/symbols.c:224 +msgid "Tree" msgstr "" -#: src/analysis/binary.c:443 -msgid "Detected architecture: Java Virtual Machine" +#: src/gui/panels/symbols.c:227 +msgid "Show symbols using a tree view" msgstr "" -#: src/analysis/binary.c:446 -msgid "" -"Detected architecture: Microprocessor without Interlocked Pipeline Stages" +#: src/gui/panels/symbols.c:234 +msgid "Collapse" msgstr "" -#: src/analysis/binary.c:449 -msgid "Detected architecture: i386" +#: src/gui/panels/symbols.c:237 +msgid "Collapse all symbol nodes in the tree view" msgstr "" -#: src/analysis/binary.c:452 -msgid "Unknown architecture" +#: src/gui/panels/symbols.c:240 +msgid "Expand" msgstr "" -#: src/analysis/binary.c:1265 src/analysis/binary.c:1268 -msgid "Group" +#: src/gui/panels/symbols.c:243 +msgid "Expand all symbol nodes in the tree view" msgstr "" -#: src/analysis/disass/disassembler.c:215 -msgid "Disassembling..." +#: src/gui/panels/symbols.c:246 +msgid "Classes" msgstr "" -#: src/analysis/disass/disassembler.c:234 -#, c-format -msgid "Disassembled instructions : %u %% (%u / %d)" +#: src/gui/panels/symbols.c:249 +msgid "Show all classes in the tree view" msgstr "" -#: src/analysis/disass/disassembler.c:242 -msgid "Establishing links..." +#: src/gui/panels/symbols.c:258 +msgid "Filter symbols using POSIX extended regular expressions" msgstr "" -#: src/analysis/disass/disassembler.c:250 -msgid "Finding remaining limits..." +#: src/gui/panels/symbols.c:346 +#, fuzzy +msgid "Binary symbols" +msgstr "Code binaire" + +#: src/gui/panels/glance.c:154 src/gui/panels/glance.c:202 +msgid "Glance" msgstr "" -#: src/analysis/disass/disassembler.c:260 -msgid "Printing disassembled code..." +#: src/gui/panels/welcome.c:149 +msgid "Welcome" msgstr "" -#: src/analysis/disass/disassembler.c:310 -msgid "Disassembly generated by Chrysalide" -msgstr "Désassemblage généré par Chrysalide" +#: src/gui/panels/strings.c:173 src/panels/breaks.c:189 +#: src/panels/strings.c:87 +msgid "Address" +msgstr "" -#: src/analysis/disass/disassembler.c:339 -#: src/analysis/disass/disassembler.c:342 -msgid "Sha256: " +#: src/gui/panels/strings.c:178 src/panels/breaks.c:209 +#: src/panels/strings.c:91 +msgid "String" msgstr "" -#: src/dialogs/plugins.c:106 -msgid "Plugins selection" +#: src/gui/panels/strings.c:190 +msgid "Find references..." msgstr "" -#: src/dialogs/plugins.c:214 -msgid "Author:" +#: src/gui/panels/strings.c:218 +msgid "Strings" msgstr "" -#: src/dialogs/plugins.c:219 -msgid "label8" +#: src/gui/panels/log.c:71 +msgid "Misc information" msgstr "" -#: src/dialogs/plugins.c:223 -msgid "Version:" +#: src/gui/status.c:219 +msgid "Address " msgstr "" -#: src/dialogs/plugins.c:228 -msgid "label9" +#: src/gui/status.c:233 +msgid " at " msgstr "" -#: src/dialogs/plugins.c:232 -msgid "URL:" +#: src/gui/status.c:235 +msgid "+" msgstr "" -#: src/dialogs/plugins.c:237 -msgid "label10" +#: src/gui/menus/binary.c:66 +msgid "_Binary" +msgstr "_Binaire" + +#: src/gui/menus/binary.c:72 +msgid "Storage..." msgstr "" -#: src/dialogs/plugins.c:251 -msgid "label12" +#: src/gui/menus/binary.c:76 +msgid "Export..." +msgstr "Exportation..." + +#: src/gui/menus/debug.c:63 +msgid "_Debug" +msgstr "_Débogage" + +#: src/gui/menus/debug.c:69 src/gui/menus/debug.c:108 +#: src/gui/menus/debug.c:123 src/dialogs/binparts.c:220 +msgid "Start" +msgstr "Démarrer" + +#: src/gui/menus/debug.c:104 +msgid "No available debug module for this binary !" +msgstr "Pas de module de débogage disponible pour ce binaire !" + +#: src/gui/menus/debug.c:112 +msgid "Failed to initialize the debugger." +msgstr "Echec de l'initialisation du débogueur." + +#: src/gui/menus/debug.c:116 +msgid "Stop" +msgstr "Arrêter" + +#: src/gui/menus/help.c:60 +msgid "_Help" +msgstr "_Aide" + +#: src/gui/menus/help.c:66 src/dialogs/about.c:75 +msgid "About" +msgstr "A propos" + +#: src/gui/menus/edition.c:61 +msgid "_Edition" msgstr "" -#: src/dialogs/plugins.c:256 -msgid "<b>Action</b>" +#: src/gui/menus/edition.c:67 +msgid "Go to address..." msgstr "" -#: src/dialogs/plugins.c:261 -msgid "<b>Details:</b>" +#: src/gui/menus/view.c:70 +msgid "_View" +msgstr "Affichage" + +#: src/gui/menus/view.c:76 +msgid "Text view" +msgstr "Vue binaire" + +#: src/gui/menus/view.c:84 +msgid "Graph view" +msgstr "Vue graphique" + +#: src/gui/menus/view.c:92 +msgid "Source code" +msgstr "Code source" + +#: src/gui/menus/view.c:101 src/dialogs/export.c:455 +#: src/dialogs/shellcode.c:784 +msgid "Virtual address" +msgstr "Adresse virtuelle" + +#: src/gui/menus/view.c:105 src/dialogs/export.c:459 +#: src/dialogs/shellcode.c:788 +msgid "Binary code" +msgstr "Code binaire" + +#: src/gui/menus/file.c:74 +msgid "_File" +msgstr "_Fichier" + +#: src/gui/menus/file.c:80 +msgid "New project" +msgstr "Nouveau projet" + +#: src/gui/menus/file.c:88 +msgid "Open project" +msgstr "Ouvrir un projet" + +#: src/gui/menus/file.c:93 +msgid "Recent projects..." +msgstr "Projets récents..." + +#: src/gui/menus/file.c:109 +msgid "Save project" +msgstr "Enregistrer le projet" + +#: src/gui/menus/file.c:114 +msgid "Save project as..." +msgstr "Enregistrer le projet sous..." + +#: src/gui/menus/file.c:121 +msgid "Quit" +msgstr "Quitter" + +#: src/gui/menus/file.c:175 +msgid "Open a project" +msgstr "Ouvrir un projet" + +#: src/gui/menus/file.c:259 +msgid "Save the project as..." +msgstr "Enregistrer le projet sous..." + +#: src/gui/menus/project.c:74 +msgid "_Project" msgstr "" -#: src/dialogs/plugins.c:293 -msgid "Apply" +#: src/gui/menus/project.c:80 +msgid "Add a binary..." msgstr "" -#: src/dialogs/plugins.c:314 -msgid "Cancel" +#: src/gui/menus/project.c:86 +#, fuzzy +msgid "Shellcode" +msgstr "Code source" + +#: src/gui/menus/project.c:90 +#, fuzzy +msgid "File" +msgstr "_Fichier" + +#: src/gui/menus/project.c:94 +msgid "Remove a binary" msgstr "" -#: src/dialogs/about.c:69 src/gui/menus/help.c:66 -msgid "About" -msgstr "A propos" +#: src/gui/menus/project.c:209 src/gui/menus/project.c:275 +msgid "Open a binary file" +msgstr "" -#: src/dialogs/binparts.c:138 -msgid "Content to display" +#: src/glibext/gbinportion.c:833 +msgid "Localisation" msgstr "" -#: src/dialogs/binparts.c:160 -msgid "Model :" +#: src/glibext/gbinportion.c:836 +msgid "physical: from " msgstr "" -#: src/dialogs/binparts.c:210 -msgid "Active" +#: src/glibext/gbinportion.c:839 src/glibext/gbinportion.c:847 +msgid " to " msgstr "" -#: src/dialogs/binparts.c:215 -msgid "Name" +#: src/glibext/gbinportion.c:844 +msgid "memory: from " msgstr "" -#: src/dialogs/binparts.c:220 src/gui/menus/debug.c:69 -#: src/gui/menus/debug.c:108 src/gui/menus/debug.c:123 -msgid "Start" -msgstr "Démarrer" +#: src/glibext/gbinportion.c:855 +msgid "Rights" +msgstr "" -#: src/dialogs/binparts.c:224 -msgid "End" +#: src/panels/breaks.c:156 +msgid "Breakpoints" msgstr "" -#: src/dialogs/binparts.c:282 -msgid "Default" +#: src/panels/registers.c:101 +msgid "Registers:" msgstr "" -#: src/dialogs/binparts.c:283 -msgid "Routines" +#: src/panels/registers.c:180 +msgid "Segments:" msgstr "" -#: src/dialogs/binparts.c:284 -msgid "User" +#: src/debug/jdwp/tcp.c:191 +#, c-format +msgid "Error while connecting to the JDWP server at %s:%s." +msgstr "Erreur lors de la connexion au serveur JDWP sur %s:%s." + +#: src/debug/jdwp/tcp.c:197 +#, c-format +msgid "Connected to %s:%hd." +msgstr "Connecté à %s:%hd." + +#: src/debug/jdwp/tcp.c:215 +msgid "Failure in the first JDWP handshake." +msgstr "Echec des premiers échanges JDWP." + +#: src/debug/jdwp/debugger.c:213 +#, c-format +msgid "The debugger is '%s' (JRE %d.%d; VM %s)." +msgstr "Le débogueur est '%s' (JRE %d.%d ; VM %s)." + +#: src/format/dwarf/info.c:483 +msgid "[no name]" msgstr "" -#: src/dialogs/add_shellcode.c:131 -msgid "Shellcode assistant" +#: src/format/exe_format.c:242 src/format/format.c:465 +msgid "ELF" msgstr "" -#: src/dialogs/add_shellcode.c:274 src/dialogs/add_shellcode.c:500 -msgid "No code" +#: src/format/exe_format.c:243 src/format/format.c:466 +msgid "Java" msgstr "" -#: src/dialogs/add_shellcode.c:281 src/dialogs/add_shellcode.c:795 -msgid "Code" -msgstr "Code" +#: src/format/exe_format.c:244 +msgid "Portable Executable" +msgstr "" -#: src/dialogs/add_shellcode.c:489 -msgid "<span color=\"red\"><b>Error while decoding</b></span>" +#: src/format/exe_format.c:301 src/format/format.c:533 +#, c-format +msgid "%s is matching..." +msgstr "" + +#: src/format/elf/symbols.c:99 +msgid "Binary is dynamically linked" msgstr "" -#: src/dialogs/add_shellcode.c:493 +#: src/format/elf/symbols.c:106 +msgid "Binary is statically linked" +msgstr "" + +#: src/format/elf/elf.c:190 #, c-format -msgid "<span color=\"#00cc00\"><b>Decoding OK (%d %s)</b></span>" +msgid "" +"Corrupted program header size (%hu); fixed ! -- replacing 0x%04hx by 0x" +"%04hx at offset 0x%x" msgstr "" -#: src/dialogs/add_shellcode.c:494 -msgid "bytes" +#: src/format/elf/elf.c:199 +#, c-format +msgid "" +"Corrupted section header size (%hu); fixed ! -- replacing 0x%04hx by 0x" +"%04hx at offset 0x%x" msgstr "" -#: src/dialogs/add_shellcode.c:494 -msgid "byte" +#: src/format/elf/elf.c:348 +msgid "Segment" msgstr "" -#: src/dialogs/add_shellcode.c:546 -msgid "Architecture:" +#: src/format/elf/elf.c:395 src/format/elf/elf.c:397 +msgid "Section" msgstr "" -#: src/dialogs/add_shellcode.c:552 -msgid "x86" +#: src/format/format.c:463 +msgid "Dalvik Executable" msgstr "" -#: src/dialogs/add_shellcode.c:558 -msgid "Register size:" +#: src/format/format.c:467 +msgid "PE" msgstr "" -#: src/dialogs/add_shellcode.c:564 -msgid "32 bits" +#: src/format/java/attribute.c:239 +#, c-format +msgid "Attribute name not supported: '%s'" msgstr "" -#: src/dialogs/add_shellcode.c:565 -msgid "16 bits" +#: src/format/java/attribute.c:243 +#, c-format +msgid "Size indication of the attribute '%s' not verified: %d vs %d" msgstr "" -#: src/dialogs/add_shellcode.c:572 -msgid "Architecture" +#: src/analysis/disass/disassembler.c:212 +msgid "Disassembling..." msgstr "" -#: src/dialogs/add_shellcode.c:629 -#, fuzzy -msgid "Format : " -msgstr "Format : " +#: src/analysis/disass/disassembler.c:231 +#, c-format +msgid "Disassembled instructions : %u %% (%u / %d)" +msgstr "" -#: src/dialogs/add_shellcode.c:635 src/dialogs/export.c:301 -msgid "Simple text" -msgstr "Texte simple" +#: src/analysis/disass/disassembler.c:241 +msgid "Establishing links..." +msgstr "" + +#: src/analysis/disass/disassembler.c:251 +msgid "Finding remaining limits..." +msgstr "" + +#: src/analysis/disass/disassembler.c:263 +msgid "Detecting loops..." +msgstr "" -#: src/dialogs/add_shellcode.c:645 +#: src/analysis/disass/disassembler.c:271 +msgid "Grouping routines instructions..." +msgstr "" + +#: src/analysis/disass/disassembler.c:283 +msgid "Ranking each instructions block..." +msgstr "" + +#: src/analysis/disass/disassembler.c:295 +msgid "Printing disassembled code..." +msgstr "" + +#: src/analysis/disass/disassembler.c:347 +msgid "Disassembly generated by Chrysalide" +msgstr "Désassemblage généré par Chrysalide" + +#: src/analysis/disass/disassembler.c:351 #, fuzzy -msgid "File : " +msgid "Chrysalide is free software - © 2008-2014 Cyrille Bagard" +msgstr "Chrysalide est un Logiciel Libre - © 2008-2012 Cyrille Bagard" + +#: src/analysis/disass/disassembler.c:359 +#: src/analysis/disass/disassembler.c:362 src/analysis/decomp/decompiler.c:96 +#: src/analysis/decomp/decompiler.c:99 src/dialogs/export.c:311 +msgid "File: " msgstr "Fichier: " -#: src/dialogs/add_shellcode.c:657 src/dialogs/export.c:323 -msgid "Output" -msgstr "Sortie" +#: src/analysis/disass/disassembler.c:376 +#: src/analysis/disass/disassembler.c:379 +msgid "Sha256: " +msgstr "" -#: src/dialogs/add_shellcode.c:723 src/dialogs/export.c:389 -msgid "Choose an output filename" -msgstr "Choisir un fichier de sortie" +#: src/analysis/decomp/decompiler.c:81 +msgid "Binary data decompiled by Chrysalide" +msgstr "Données binaires décompilées par Chrysalide" -#: src/dialogs/add_shellcode.c:784 -#, fuzzy -msgid "<b>Lines to process</b>" -msgstr "<b>Eléments à afficher</b>" +#: src/analysis/decomp/decompiler.c:85 +msgid "Chrysalide is free software - © 2008-2012 Cyrille Bagard" +msgstr "Chrysalide est un Logiciel Libre - © 2008-2012 Cyrille Bagard" -#: src/dialogs/add_shellcode.c:791 -msgid "Prologue" +#: src/analysis/decomp/decompiler.c:94 +msgid "whole binary" msgstr "" -#: src/dialogs/add_shellcode.c:799 -msgid "Comments" +#: src/analysis/db/server.c:390 +#, c-format +msgid "Server started and listening at %s:%hu" msgstr "" -#: src/dialogs/add_shellcode.c:805 src/dialogs/export.c:448 -msgid "<b>Items to display</b>" -msgstr "<b>Eléments à afficher</b>" +#: src/analysis/binaries/file.c:171 +#, c-format +msgid "Opening '%s' file..." +msgstr "" -#: src/dialogs/add_shellcode.c:812 src/dialogs/export.c:455 -#: src/gui/menus/view.c:101 -msgid "Virtual address" -msgstr "Adresse virtuelle" +#: src/analysis/binaries/file.c:215 +msgid "Unknown binary format" +msgstr "" -#: src/dialogs/add_shellcode.c:816 src/dialogs/export.c:459 -#: src/gui/menus/view.c:105 -msgid "Binary code" -msgstr "Code binaire" +#: src/analysis/binaries/file.c:222 +msgid "Detected architecture: ARM" +msgstr "" -#: src/dialogs/add_shellcode.c:820 src/dialogs/export.c:463 -msgid "Assembly code" -msgstr "Code d'assembleur" +#: src/analysis/binaries/file.c:225 +msgid "Detected architecture: Dalvik Virtual Machine" +msgstr "" -#: src/dialogs/add_shellcode.c:827 src/dialogs/export.c:470 -msgid "Exported content" -msgstr "Contenu exporté" +#: src/analysis/binaries/file.c:228 +msgid "Detected architecture: Java Virtual Machine" +msgstr "" -#: src/dialogs/export.c:114 -msgid "Export assistant" -msgstr "Assistant d'exportation" +#: src/analysis/binaries/file.c:231 +msgid "" +"Detected architecture: Microprocessor without Interlocked Pipeline Stages" +msgstr "" -#: src/dialogs/export.c:213 -msgid "Exporting binary lines..." -msgstr "Exportation des lignes binaires..." +#: src/analysis/binaries/file.c:234 +msgid "Detected architecture: i386" +msgstr "" -#: src/dialogs/export.c:295 -msgid "Format: " -msgstr "Format : " +#: src/analysis/binaries/file.c:237 +msgid "Unknown architecture" +msgstr "" -#: src/panel/strings.c:87 src/panels/breaks.c:188 src/panels/strings.c:87 -msgid "Address" +#: src/dialogs/binparts.c:138 +msgid "Content to display" msgstr "" -#: src/panel/strings.c:91 src/panels/breaks.c:208 src/panels/strings.c:91 -msgid "String" +#: src/dialogs/binparts.c:160 +msgid "Model :" msgstr "" -#: src/panel/registers.c:100 src/panels/registers.c:101 -msgid "Registers:" +#: src/dialogs/binparts.c:210 +msgid "Active" msgstr "" -#: src/panel/registers.c:179 src/panels/registers.c:180 -msgid "Segments:" +#: src/dialogs/binparts.c:215 +msgid "Name" msgstr "" -#: src/gui/menus/file.c:74 -msgid "_File" -msgstr "_Fichier" +#: src/dialogs/binparts.c:224 +msgid "End" +msgstr "" -#: src/gui/menus/file.c:80 -msgid "New project" -msgstr "Nouveau projet" +#: src/dialogs/binparts.c:282 +msgid "Default" +msgstr "" -#: src/gui/menus/file.c:88 -msgid "Open project" -msgstr "Ouvrir un projet" +#: src/dialogs/binparts.c:283 +msgid "Routines" +msgstr "" -#: src/gui/menus/file.c:93 -msgid "Recent projects..." -msgstr "Projets récents..." +#: src/dialogs/binparts.c:284 +msgid "User" +msgstr "" -#: src/gui/menus/file.c:109 -msgid "Save project" -msgstr "Enregistrer le projet" +#: src/dialogs/export.c:114 +msgid "Export assistant" +msgstr "Assistant d'exportation" -#: src/gui/menus/file.c:114 -msgid "Save project as..." -msgstr "Enregistrer le projet sous..." +#: src/dialogs/export.c:213 +msgid "Exporting binary lines..." +msgstr "Exportation des lignes binaires..." -#: src/gui/menus/file.c:121 -msgid "Quit" -msgstr "Quitter" +#: src/dialogs/export.c:295 +msgid "Format: " +msgstr "Format : " -#: src/gui/menus/file.c:175 -msgid "Open a project" -msgstr "Ouvrir un projet" +#: src/dialogs/export.c:301 src/dialogs/shellcode.c:607 +msgid "Simple text" +msgstr "Texte simple" -#: src/gui/menus/file.c:259 -msgid "Save the project as..." -msgstr "Enregistrer le projet sous..." +#: src/dialogs/export.c:323 src/dialogs/shellcode.c:629 +msgid "Output" +msgstr "Sortie" -#: src/gui/menus/view.c:70 src/editor.c:247 -msgid "_View" -msgstr "Affichage" +#: src/dialogs/export.c:389 src/dialogs/shellcode.c:695 +msgid "Choose an output filename" +msgstr "Choisir un fichier de sortie" -#: src/gui/menus/view.c:76 -msgid "Text view" -msgstr "Vue binaire" +#: src/dialogs/export.c:448 src/dialogs/shellcode.c:777 +msgid "<b>Items to display</b>" +msgstr "<b>Eléments à afficher</b>" -#: src/gui/menus/view.c:84 -msgid "Graph view" -msgstr "Vue graphique" +#: src/dialogs/export.c:463 src/dialogs/shellcode.c:792 +msgid "Assembly code" +msgstr "Code d'assembleur" -#: src/gui/menus/view.c:92 -msgid "Source code" -msgstr "Code source" +#: src/dialogs/export.c:470 src/dialogs/shellcode.c:799 +msgid "Exported content" +msgstr "Contenu exporté" -#: src/gui/menus/binary.c:62 src/editor.c:273 -msgid "_Binary" -msgstr "_Binaire" +#: src/dialogs/storage.c:139 +msgid "Features" +msgstr "" -#: src/gui/menus/binary.c:68 -msgid "Export..." -msgstr "Exportation..." +#: src/dialogs/storage.c:149 src/dialogs/storage.c:564 +msgid "Local storage" +msgstr "" -#: src/gui/menus/help.c:60 -msgid "_Help" -msgstr "_Aide" +#: src/dialogs/storage.c:151 src/dialogs/storage.c:567 +#: src/dialogs/storage.c:621 +msgid "Remote storage" +msgstr "" -#: src/gui/menus/project.c:66 -msgid "_Project" +#: src/dialogs/storage.c:153 src/dialogs/storage.c:570 +#: src/dialogs/storage.c:623 +msgid "Local storage with remote access" msgstr "" -#: src/gui/menus/project.c:72 -msgid "Add a binary..." +#: src/dialogs/storage.c:160 src/dialogs/storage.c:201 +msgid "Storage" msgstr "" -#: src/gui/menus/project.c:78 +#: src/dialogs/storage.c:222 #, fuzzy -msgid "File" -msgstr "_Fichier" +msgid "<b>Identity</b>" +msgstr "<b>Eléments à afficher</b>" -#: src/gui/menus/project.c:82 -msgid "Remove a binary" +#: src/dialogs/storage.c:229 +msgid "Username: " msgstr "" -#: src/gui/menus/project.c:176 -msgid "Open a binary file" +#: src/dialogs/storage.c:237 +msgid "<b>Server to contact</b>" msgstr "" -#: src/gui/menus/debug.c:63 src/editor.c:287 -msgid "_Debug" -msgstr "_Débogage" - -#: src/gui/menus/debug.c:104 -msgid "No available debug module for this binary !" -msgstr "Pas de module de débogage disponible pour ce binaire !" - -#: src/gui/menus/debug.c:112 -msgid "Failed to initialize the debugger." -msgstr "Echec de l'initialisation du débogueur." +#: src/dialogs/storage.c:245 +msgid "Use a remote server:" +msgstr "" -#: src/gui/menus/debug.c:116 -msgid "Stop" -msgstr "Arrêter" +#: src/dialogs/storage.c:254 +msgid "Host: " +msgstr "" -#: src/gui/panels/log.c:70 -msgid "Misc information" +#: src/dialogs/storage.c:261 +msgid "Port:" msgstr "" -#: src/gui/panels/symbols.c:300 -#, fuzzy -msgid "Binary symbols" -msgstr "Code binaire" +#: src/dialogs/storage.c:549 src/dialogs/shellcode.c:771 +msgid "Comments" +msgstr "" -#: src/gui/tb/source.c:85 -msgid " Source: " +#: src/dialogs/storage.c:552 +msgid "Segments display" msgstr "" -#: src/gui/tb/source.c:116 -msgid "Source files" +#: src/dialogs/storage.c:555 +msgid "Bookmarks" msgstr "" -#: src/format/dwarf/info.c:483 -msgid "[no name]" +#: src/dialogs/goto.c:155 +#, fuzzy +msgid "Go to address" +msgstr "Adresse virtuelle" + +#: src/dialogs/goto.c:168 +msgid "Enter the value of the target address:" msgstr "" -#: src/format/elf/elf.c:182 -#, c-format -msgid "" -"Corrupted program header size (%hu); fixed ! -- replacing 0x%04hx by 0x" -"%04hx at offset 0x%x" +#: src/dialogs/shellcode.c:131 +msgid "Shellcode assistant" msgstr "" -#: src/format/elf/elf.c:191 -#, c-format +#: src/dialogs/shellcode.c:262 msgid "" -"Corrupted section header size (%hu); fixed ! -- replacing 0x%04hx by 0x" -"%04hx at offset 0x%x" +"Paste here the raw C code containing the shellcode.\r\n" +"All content between quotes will be extracted." msgstr "" -#: src/format/elf/symbols.c:99 -msgid "Binary is dynamically linked" +#: src/dialogs/shellcode.c:279 src/dialogs/shellcode.c:461 +msgid "No code" msgstr "" -#: src/format/elf/symbols.c:106 -msgid "Binary is statically linked" -msgstr "" +#: src/dialogs/shellcode.c:286 src/dialogs/shellcode.c:767 +msgid "Code" +msgstr "Code" -#: src/format/exe_format.c:242 src/format/format.c:487 -msgid "ELF" +#: src/dialogs/shellcode.c:448 +msgid "<span color=\"red\"><b>Error while decoding</b></span>" msgstr "" -#: src/format/exe_format.c:243 src/format/format.c:488 -msgid "Java" +#: src/dialogs/shellcode.c:452 +msgid "<span color=\"#00cc00\"><b>Decoding OK (" msgstr "" -#: src/format/exe_format.c:244 -msgid "Portable Executable" +#: src/dialogs/shellcode.c:454 +msgid "bytes" msgstr "" -#: src/format/exe_format.c:301 src/format/format.c:555 -#, c-format -msgid "%s is matching..." +#: src/dialogs/shellcode.c:454 +msgid "byte" msgstr "" -#: src/format/java/attribute.c:239 -#, c-format -msgid "Attribute name not supported: '%s'" +#: src/dialogs/shellcode.c:518 +msgid "Architecture:" msgstr "" -#: src/format/java/attribute.c:243 -#, c-format -msgid "Size indication of the attribute '%s' not verified: %d vs %d" +#: src/dialogs/shellcode.c:524 +msgid "x86" msgstr "" -#: src/format/format.c:485 -msgid "Dalvik Executable" +#: src/dialogs/shellcode.c:530 +msgid "Register size:" msgstr "" -#: src/format/format.c:489 -msgid "PE" +#: src/dialogs/shellcode.c:536 +msgid "32 bits" msgstr "" -#: src/editor.c:213 -msgid "Chrysalide" +#: src/dialogs/shellcode.c:537 +msgid "16 bits" msgstr "" -#: src/editor.c:260 -msgid "Toolbar" +#: src/dialogs/shellcode.c:544 +msgid "Architecture" msgstr "" -#: src/editor.c:266 -msgid "Source file" +#: src/dialogs/shellcode.c:601 +#, fuzzy +msgid "Format : " +msgstr "Format : " + +#: src/dialogs/shellcode.c:617 +#, fuzzy +msgid "File : " +msgstr "Fichier: " + +#: src/dialogs/shellcode.c:756 +#, fuzzy +msgid "<b>Lines to process</b>" +msgstr "<b>Eléments à afficher</b>" + +#: src/dialogs/shellcode.c:763 +msgid "Prologue" msgstr "" -#: src/editor.c:280 -msgid "Select parts..." +#: src/dialogs/plugins.c:106 +msgid "Plugins selection" msgstr "" -#: src/editor.c:283 -msgid "Select plugins..." +#: src/dialogs/plugins.c:210 +msgid "Author:" msgstr "" -#: src/editor.c:294 -msgid "Start process" +#: src/dialogs/plugins.c:215 +msgid "label8" msgstr "" -#: src/editor.c:297 -msgid "Pause process" +#: src/dialogs/plugins.c:219 +msgid "Version:" msgstr "" -#: src/editor.c:300 -msgid "Resume process" +#: src/dialogs/plugins.c:224 +msgid "label9" msgstr "" -#: src/editor.c:303 -msgid "Kill process" +#: src/dialogs/plugins.c:228 +msgid "URL:" msgstr "" -#: src/editor.c:309 -msgid "Step into" +#: src/dialogs/plugins.c:233 +msgid "label10" msgstr "" -#: src/editor.c:312 -msgid "Step over" +#: src/dialogs/plugins.c:247 +msgid "label12" msgstr "" -#: src/editor.c:315 -msgid "Run until ret" +#: src/dialogs/plugins.c:252 +msgid "<b>Action</b>" msgstr "" -#: src/editor.c:397 -msgid "Registers" +#: src/dialogs/plugins.c:257 +msgid "<b>Details:</b>" msgstr "" -#: src/editor.c:417 -msgid "Strings" +#: src/dialogs/plugins.c:288 +msgid "Apply" msgstr "" -#: src/editor.c:510 -msgid "The current project will be lost. Do you you want to save it ?" +#: src/dialogs/plugins.c:308 +msgid "Cancel" msgstr "" -#: src/main.c:64 +#: src/main.c:70 #, c-format msgid "Last compiled on %s at %s\n" msgstr "" -#: src/main.c:68 +#: src/main.c:74 #, c-format msgid "Data directory: %s\n" msgstr "" -#: src/main.c:69 +#: src/main.c:75 #, c-format msgid "Plugins directory: %s\n" msgstr "" -#: src/main.c:70 +#: src/main.c:76 #, c-format msgid "Locale directory: %s\n" msgstr "" -#: src/panels/glimpse.c:105 -msgid "Glimpse" -msgstr "" - -#: src/panels/breaks.c:155 -msgid "Breakpoints" -msgstr "" - -#: src/arch/dalvik/operands/pool.c:210 -msgid "invalid type" -msgstr "" - -#: src/arch/dalvik/operands/pool.c:231 -msgid "invalid field" +#: src/editor.c:155 +msgid "Chrysalide" msgstr "" -#: src/arch/dalvik/operands/pool.c:247 -msgid "invalid method" +#: src/editor.c:260 +msgid "The current project will be lost. Do you you want to save it ?" msgstr "" diff --git a/src/analysis/binaries/file.c b/src/analysis/binaries/file.c index df145f7..ad140ab 100644 --- a/src/analysis/binaries/file.c +++ b/src/analysis/binaries/file.c @@ -66,9 +66,6 @@ static void g_file_binary_finalize(GFileBinary *); /* Ecrit une sauvegarde du binaire dans un fichier XML. */ static bool g_file_binary_save(const GFileBinary *, xmlDocPtr, xmlXPathContextPtr, const char *); -/* Fournit le fichier correspondant à l'élément binaire. */ -static const char *g_file_binary_get_filename(const GFileBinary *, bool); - /* Indique le type défini pour une description de fichier binaire. */ @@ -348,7 +345,7 @@ static bool g_file_binary_save(const GFileBinary *binary, xmlDocPtr xdoc, xmlXPa * * ******************************************************************************/ -static const char *g_file_binary_get_filename(const GFileBinary *binary, bool full) +const char *g_file_binary_get_filename(const GFileBinary *binary, bool full) { const char *result; /* Description à retourner */ diff --git a/src/analysis/binaries/file.h b/src/analysis/binaries/file.h index d09c86d..40bc722 100644 --- a/src/analysis/binaries/file.h +++ b/src/analysis/binaries/file.h @@ -56,6 +56,9 @@ GLoadedBinary *g_file_binary_new_from_file(const char *); /* Charge en mémoire le contenu d'un fichier à partir d'XML. */ GLoadedBinary *g_file_binary_new_from_xml(xmlXPathContextPtr, const char *); +/* Fournit le fichier correspondant à l'élément binaire. */ +const char *g_file_binary_get_filename(const GFileBinary *, bool); + #endif /* _ANALYSIS_BINARIES_FILE_H */ diff --git a/src/arch/Makefile.am b/src/arch/Makefile.am index 94c8305..e87247e 100644 --- a/src/arch/Makefile.am +++ b/src/arch/Makefile.am @@ -15,7 +15,8 @@ libarch_la_SOURCES = \ processor.h processor.c \ register-int.h \ register.h register.c \ - translate.h + translate.h \ + vmpa.h vmpa.c libarch_la_LIBADD = \ arm/libarcharm.la \ diff --git a/src/arch/vmpa.c b/src/arch/vmpa.c new file mode 100644 index 0000000..24d5792 --- /dev/null +++ b/src/arch/vmpa.c @@ -0,0 +1,87 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * vmpa.c - adressages virtuels ou physiques + * + * Copyright (C) 2014 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * OpenIDA is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * OpenIDA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Foobar. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "vmpa.h" + + +#include <inttypes.h> +#include <malloc.h> + + + + + + + +/****************************************************************************** +* * +* Paramètres : phy = position dans la mémoire physique. * +* virt = adresse dans la mémoire virtuelle. * +* * +* Description : Crée une localisation dans l'adressage mémoire. * +* * +* Retour : Adressage alloué en mémoire. * +* * +* Remarques : - * +* * +******************************************************************************/ + +vmpa2_t *make_vmpa(off_t phy, uint64_t virt) +{ + vmpa2_t *result; /* Structure à retourner */ + + result = (vmpa2_t *)calloc(1, sizeof(vmpa2_t)); + + result->physical = phy; + result->virtual = virt; + + return result; + +} + + + + + +/****************************************************************************** +* * +* Paramètres : addr = élément à initialiser. * +* phy = position dans la mémoire physique. * +* virt = adresse dans la mémoire virtuelle. * +* * +* Description : Initialise une localisation dans l'espace mémoire/physique. * +* * +* Retour : Adressage alloué en mémoire. * +* * +* Remarques : - * +* * +******************************************************************************/ + +void init_vmpa(vmpa2_t *addr, off_t phy, uint64_t virt) +{ + addr->physical = phy; + addr->virtual = virt; + +} + + diff --git a/src/arch/vmpa.h b/src/arch/vmpa.h new file mode 100644 index 0000000..fa14fda --- /dev/null +++ b/src/arch/vmpa.h @@ -0,0 +1,68 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * vmpa.h - prototypes des adressages virtuels ou physiques + * + * Copyright (C) 2014 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * OpenIDA is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * OpenIDA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Foobar. If not, see <http://www.gnu.org/licenses/>. + */ + + +#ifndef _ARCH_VMPA_H +#define _ARCH_VMPA_H + + +#include <stdbool.h> +#include <stdint.h> +#include <sys/types.h> + + + + + +/* Adresse mémoire ou position physique */ +struct _vmpa2_t +{ + off_t physical; /* Position physique */ + uint64_t virtual; /* Adresse virtuelle */ + +}; + + + +/* Adresse mémoire ou position physique */ +typedef struct _vmpa2_t vmpa2_t; + + +/* Initialise une localisation dans l'espace mémoire/physique. */ +void init_vmpa(vmpa2_t *, off_t, uint64_t); + + + + +/* Crée une localisation dans l'adressage mémoire. */ +vmpa2_t *make_vmpa(off_t, uint64_t); + + + +#define load_vmpa_from_fd(vmpa, fd) true + +#define store_vmpa_to_fd(vmpa, fd) true + + + + +#endif /* _ARCH_VMPA_H */ diff --git a/src/gtkext/gtkdockstation.c b/src/gtkext/gtkdockstation.c index c299542..a742c07 100644 --- a/src/gtkext/gtkdockstation.c +++ b/src/gtkext/gtkdockstation.c @@ -230,7 +230,7 @@ void gtk_dock_panel_add_widget(GtkDockStation *station, GtkWidget *widget, const char *str; /* Titre des prochaines fois */ GtkWidget *label; /* Etiquette d'onglet */ - max = get_integer_config_value(get_main_configuration(), MPT_ELLIPSIS_TAB); + max = 3; // TODO : config dans un .so pour Python // get_integer_config_value(get_main_configuration(), MPT_ELLIPSIS_TAB); str = ellipsis(strdup(caption), max); label = qck_create_label(NULL, NULL, str); @@ -249,7 +249,7 @@ void gtk_dock_panel_add_widget(GtkDockStation *station, GtkWidget *widget, const str = g_object_get_data(G_OBJECT(widget), "title"); if (str != NULL) free(str); - max = get_integer_config_value(get_main_configuration(), MPT_ELLIPSIS_HEADER); + max = 3; // TODO : config dans un .so pour Python // get_integer_config_value(get_main_configuration(), MPT_ELLIPSIS_HEADER); g_object_set_data(G_OBJECT(widget), "title", ellipsis(strdup(caption), max)); gtk_dock_panel_update_title(station, widget, caption); |