summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-09-11 20:40:24 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-09-11 20:40:24 (GMT)
commit18648e4e8763a3bc005d6fae51eae3d1528d7d29 (patch)
tree05feca5b6c5575b2a048b60130e3207b9f2c355a /plugins
parent9f8c79e3b272960b48bfd85a24f4b5cb5651df2d (diff)
Created an interface from the original GBinContent object.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@576 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'plugins')
-rw-r--r--plugins/mobicore/mclf-int.c2
-rw-r--r--plugins/mobicore/mclf.c2
-rw-r--r--plugins/pychrysa/analysis/Makefile.am4
-rw-r--r--plugins/pychrysa/analysis/content.c (renamed from plugins/pychrysa/glibext/bincontent.c)136
-rw-r--r--plugins/pychrysa/analysis/content.h (renamed from plugins/pychrysa/glibext/bincontent.h)8
-rw-r--r--plugins/pychrysa/analysis/contents/Makefile.am14
-rw-r--r--plugins/pychrysa/analysis/contents/file.c199
-rw-r--r--plugins/pychrysa/analysis/contents/file.h42
-rw-r--r--plugins/pychrysa/analysis/contents/module.c92
-rw-r--r--plugins/pychrysa/analysis/contents/module.h39
-rw-r--r--plugins/pychrysa/analysis/module.c4
-rw-r--r--plugins/pychrysa/core/formats.c190
-rw-r--r--plugins/pychrysa/core/formats.h42
-rw-r--r--plugins/pychrysa/format/dex/dex.c2
-rw-r--r--plugins/pychrysa/format/elf/elf.c2
-rw-r--r--plugins/pychrysa/glibext/Makefile.am1
-rw-r--r--plugins/pychrysa/glibext/module.c2
-rw-r--r--plugins/ropgadgets/select.c3
18 files changed, 700 insertions, 84 deletions
diff --git a/plugins/mobicore/mclf-int.c b/plugins/mobicore/mclf-int.c
index cb4dbb3..a4dd3b7 100644
--- a/plugins/mobicore/mclf-int.c
+++ b/plugins/mobicore/mclf-int.c
@@ -62,7 +62,7 @@ bool read_mclf_header(GMCLFFormat *format, mclf_header_t *header, SourceEndian e
printf("Mem type : 0x%08x\n", header->v1.mem_type);
result &= g_binary_content_read_u32(content, &pos, endian, &header->v1.num_instances);
- result &= g_binary_content_get_raw(content, &pos, 16, (bin_t *)&header->v1.uuid);
+ result &= g_binary_content_read_raw(content, &pos, 16, (bin_t *)&header->v1.uuid);
result &= g_binary_content_read_u32(content, &pos, endian, &header->v1.driver_id);
result &= g_binary_content_read_u32(content, &pos, endian, &header->v1.num_threads);
diff --git a/plugins/mobicore/mclf.c b/plugins/mobicore/mclf.c
index 829a488..99ff7ed 100644
--- a/plugins/mobicore/mclf.c
+++ b/plugins/mobicore/mclf.c
@@ -74,7 +74,7 @@ const char *mclf_is_matching(GBinContent *content, GExeFormat *parent)
init_vmpa(&addr, 0, VMPA_NO_VIRTUAL);
- status = g_binary_content_get_raw(content, &addr, 4, (bin_t *)magic);
+ status = g_binary_content_read_raw(content, &addr, 4, (bin_t *)magic);
status &= (memcmp(magic, MC_SERVICE_HEADER_MAGIC_STR, 4) == 0);
diff --git a/plugins/pychrysa/analysis/Makefile.am b/plugins/pychrysa/analysis/Makefile.am
index 8b0609d..c014dfd 100644
--- a/plugins/pychrysa/analysis/Makefile.am
+++ b/plugins/pychrysa/analysis/Makefile.am
@@ -4,12 +4,14 @@ noinst_LTLIBRARIES = libpychrysaanalysis.la
libpychrysaanalysis_la_SOURCES = \
binary.h binary.c \
block.h block.c \
+ content.h content.c \
module.h module.c \
routine.h routine.c
libpychrysaanalysis_la_LIBADD = \
binaries/libpychrysaanalysisbinaries.la \
blocks/libpychrysaanalysisblocks.la \
+ contents/libpychrysaanalysiscontents.la \
db/libpychrysaanalysisdb.la
libpychrysaanalysis_la_LDFLAGS =
@@ -20,4 +22,4 @@ AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_CFLAGS) $(LIBPYGOBJE
AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS)
-SUBDIRS = binaries blocks db
+SUBDIRS = binaries blocks contents db
diff --git a/plugins/pychrysa/glibext/bincontent.c b/plugins/pychrysa/analysis/content.c
index 085c9af..a37aa44 100644
--- a/plugins/pychrysa/glibext/bincontent.c
+++ b/plugins/pychrysa/analysis/content.c
@@ -1,6 +1,6 @@
/* Chrysalide - Outil d'analyse de fichiers binaires
- * bincontent.c - prototypes pour l'équivalent Python du fichier "glibext/gbincontent.c"
+ * content.c - prototypes pour l'équivalent Python du fichier "analysis/content.c"
*
* Copyright (C) 2015 Cyrille Bagard
*
@@ -22,20 +22,15 @@
*/
-#include "bincontent.h"
+#include "content.h"
#include <pygobject.h>
-#include <glibext/gbincontent.h>
+#include <analysis/content.h>
-#include "../arch/vmpa.h"
-
-
-/* Crée un nouvel objet Python de type 'BinContent'. */
-static PyObject *py_binary_content_new(PyTypeObject *, PyObject *, PyObject *);
/* Fournit une empreinte unique (SHA256) pour les données. */
static PyObject *py_binary_content_get_checksum(PyObject *, PyObject *);
@@ -48,51 +43,6 @@ static PyObject *py_binary_content_read_u8(PyObject *, PyObject *);
-
-
-
-
-
-
-
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : type = type de l'objet à instancier. *
-* args = arguments fournis à l'appel. *
-* kwds = arguments de type key=val fournis. *
-* *
-* Description : Crée un nouvel objet Python de type 'BinContent'. *
-* *
-* Retour : Instance Python mise en place. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static PyObject *py_binary_content_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
-{
- PyObject *result; /* Instance à retourner */
- const char *filename; /* Nom du fichier à charger */
- int ret; /* Bilan de lecture des args. */
- GBinContent *content; /* Version GLib du contenu */
-
- ret = PyArg_ParseTuple(args, "s", &filename);
- if (!ret) Py_RETURN_NONE;
-
- content = g_binary_content_new_from_file(filename);
-
- result = pygobject_new(G_OBJECT(content));
- g_object_unref(content);
-
- return result;
-
-}
-
-
/******************************************************************************
* *
* Paramètres : self = contenu binaire à manipuler. *
@@ -114,9 +64,12 @@ static PyObject *py_binary_content_get_checksum(PyObject *self, PyObject *args)
content = G_BIN_CONTENT(pygobject_get(self));
- checksum = g_binary_content_get_cheksum(content);
+ //checksum = g_binary_content_get_cheksum(content);
- result = PyUnicode_FromString(checksum);
+ printf("YEAH\n");
+ fflush(NULL);
+
+ result = PyUnicode_FromString("checksum");
return result;
@@ -204,10 +157,6 @@ static PyObject *py_binary_content_read_u8(PyObject *self, PyObject *args)
-
-
-
-
/******************************************************************************
* *
* Paramètres : - *
@@ -220,12 +169,52 @@ static PyObject *py_binary_content_read_u8(PyObject *self, PyObject *args)
* *
******************************************************************************/
+
+static PyMethodDef py_binary_content_methods[] = {
+ { "get_checksum", py_binary_content_get_checksum,
+ METH_NOARGS,
+ "get_checksum($self, /)\n--\n\nCompute a SHA256 hash as chechsum of handled data."
+ },
+ { "compute_size", py_binary_content_compute_size,
+ METH_NOARGS,
+ "compute_size($self, /)\n--\n\nCompute the quantity of readable bytes."
+ },
+ { "read_u8", py_binary_content_read_u8,
+ METH_VARARGS,
+ "read_u8($self, addr, /)\n--\n\nRead an unsigned byte from a given position."
+ },
+ { NULL }
+};
+
+static PyGetSetDef py_binary_content_getseters[] = {
+ { NULL }
+};
+
+PyTypeObject py_binary_content_type = {
+
+ PyVarObject_HEAD_INIT(NULL, 0)
+
+ .tp_name = "pychrysalide.analysis.contents.BinContent",
+ .tp_basicsize = sizeof(PyObject),
+
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+
+ .tp_doc = "PyChrysalide binary content",
+
+ .tp_methods = py_binary_content_methods,
+ //.tp_getset = py_binary_content_getseters
+
+};
+
+
+
PyTypeObject *get_python_binary_content_type(void)
{
+#if 0
static PyMethodDef py_binary_content_methods[] = {
- { "get_cheksum", py_binary_content_get_checksum,
+ { "get_checksum", py_binary_content_get_checksum,
METH_NOARGS,
- "get_cheksum($self, /)\n--\n\nCompute a SHA256 hash as chechsum of handled data."
+ "get_checksum($self, /)\n--\n\nCompute a SHA256 hash as chechsum of handled data."
},
{ "compute_size", py_binary_content_compute_size,
METH_NOARGS,
@@ -246,19 +235,18 @@ PyTypeObject *get_python_binary_content_type(void)
PyVarObject_HEAD_INIT(NULL, 0)
- .tp_name = "pychrysalide.glibext.BinContent",
- .tp_basicsize = sizeof(PyGObject),
+ .tp_name = "pychrysalide.analysis.contents.BinContent",
+ .tp_basicsize = sizeof(PyObject),
- .tp_flags = Py_TPFLAGS_DEFAULT,
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
.tp_doc = "PyChrysalide binary content",
.tp_methods = py_binary_content_methods,
- .tp_getset = py_binary_content_getseters,
- .tp_new = (newfunc)py_binary_content_new
+ //.tp_getset = py_binary_content_getseters
};
-
+#endif
return &py_binary_content_type;
}
@@ -284,19 +272,25 @@ bool register_python_binary_content(PyObject *module)
py_binary_content_type = get_python_binary_content_type();
- py_binary_content_type->tp_base = &PyGObject_Type;
- py_binary_content_type->tp_basicsize = py_binary_content_type->tp_base->tp_basicsize;
+ //py_binary_content_type->tp_base = &PyGObject_Type;
+ //py_binary_content_type->tp_basicsize = py_binary_content_type->tp_base->tp_basicsize;
+
+ //py_binary_content_type->tp_base = &PyObject_Type;
+ //py_binary_content_type->tp_basicsize = py_binary_content_type->tp_base->tp_basicsize;
+ /*
if (PyType_Ready(py_binary_content_type) != 0)
return false;
+ */
+ /*
Py_INCREF(py_binary_content_type);
ret = PyModule_AddObject(module, "BinContent", (PyObject *)py_binary_content_type);
if (ret != 0) return false;
+ */
dict = PyModule_GetDict(module);
- pygobject_register_class(dict, "BinContent", G_TYPE_BIN_CONTENT, py_binary_content_type,
- Py_BuildValue("(O)", py_binary_content_type->tp_base));
+ pyg_register_interface(dict, "BinContent", G_TYPE_BIN_CONTENT, py_binary_content_type);
return true;
diff --git a/plugins/pychrysa/glibext/bincontent.h b/plugins/pychrysa/analysis/content.h
index b6ae9a5..230bfe1 100644
--- a/plugins/pychrysa/glibext/bincontent.h
+++ b/plugins/pychrysa/analysis/content.h
@@ -1,6 +1,6 @@
/* Chrysalide - Outil d'analyse de fichiers binaires
- * bincontent.h - prototypes pour l'équivalent Python du fichier "glibext/gbincontent.h"
+ * content.h - prototypes pour l'équivalent Python du fichier "analysis/content.h"
*
* Copyright (C) 2015 Cyrille Bagard
*
@@ -22,8 +22,8 @@
*/
-#ifndef _PLUGINS_PYCHRYSA_GLIBEXT_BINCONTENT_H
-#define _PLUGINS_PYCHRYSA_GLIBEXT_BINCONTENT_H
+#ifndef _PLUGINS_PYCHRYSA_ANALYSIS_CONTENT_H
+#define _PLUGINS_PYCHRYSA_ANALYSIS_CONTENT_H
#include <Python.h>
@@ -39,4 +39,4 @@ bool register_python_binary_content(PyObject *);
-#endif /* _PLUGINS_PYCHRYSA_GLIBEXT_BINCONTENT_H */
+#endif /* _PLUGINS_PYCHRYSA_ANALYSIS_CONTENT_H */
diff --git a/plugins/pychrysa/analysis/contents/Makefile.am b/plugins/pychrysa/analysis/contents/Makefile.am
new file mode 100644
index 0000000..ff835e3
--- /dev/null
+++ b/plugins/pychrysa/analysis/contents/Makefile.am
@@ -0,0 +1,14 @@
+
+noinst_LTLIBRARIES = libpychrysaanalysiscontents.la
+
+libpychrysaanalysiscontents_la_SOURCES = \
+ file.h file.c \
+ module.h module.c
+
+libpychrysaanalysiscontents_la_LDFLAGS =
+
+
+AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_CFLAGS) $(LIBPYGOBJECT_CFLAGS) \
+ -I../../../../src
+
+AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS)
diff --git a/plugins/pychrysa/analysis/contents/file.c b/plugins/pychrysa/analysis/contents/file.c
new file mode 100644
index 0000000..b145662
--- /dev/null
+++ b/plugins/pychrysa/analysis/contents/file.c
@@ -0,0 +1,199 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * file.c - prototypes pour l'équivalent Python du fichier "analysis/contents/file.c"
+ *
+ * Copyright (C) 2015 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 "file.h"
+
+
+#include <pygobject.h>
+
+
+#include <analysis/contents/file.h>
+
+
+
+/* Crée un nouvel objet Python de type 'BinContent'. */
+static PyObject *py_file_content_new(PyTypeObject *, PyObject *, PyObject *);
+
+
+
+/******************************************************************************
+* *
+* Paramètres : type = type de l'objet à instancier. *
+* args = arguments fournis à l'appel. *
+* kwds = arguments de type key=val fournis. *
+* *
+* Description : Crée un nouvel objet Python de type 'BinContent'. *
+* *
+* Retour : Instance Python mise en place. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static PyObject *py_file_content_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ PyObject *result; /* Instance à retourner */
+ const char *filename; /* Nom du fichier à charger */
+ int ret; /* Bilan de lecture des args. */
+ GBinContent *content; /* Version GLib du contenu */
+
+ ret = PyArg_ParseTuple(args, "s", &filename);
+ if (!ret) Py_RETURN_NONE;
+
+ content = g_file_content_new(filename);
+
+ result = pygobject_new(G_OBJECT(content));
+ g_object_unref(content);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : - *
+* *
+* Description : Fournit un accès à une définition de type à diffuser. *
+* *
+* Retour : Définition d'objet pour Python. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+
+
+PyMethodDef py_file_content_methods[] = {
+ { NULL }
+};
+
+PyGetSetDef py_file_content_getseters[] = {
+ { NULL }
+};
+
+PyTypeObject py_file_content_type = {
+
+ PyVarObject_HEAD_INIT(NULL, 0)
+
+ .tp_name = "pychrysalide.analysis.contents.FileContent",
+ .tp_basicsize = sizeof(PyGObject),
+
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+
+ .tp_doc = "PyChrysalide binary file content",
+
+ /*
+ .tp_methods = py_file_content_methods,
+ .tp_getset = py_file_content_getseters,
+ .tp_new = (newfunc)py_file_content_new
+ */
+
+};
+
+
+
+PyTypeObject *get_python_file_content_type(void)
+{
+#if 0
+ static PyMethodDef py_file_content_methods[] = {
+ { NULL }
+ };
+
+ static PyGetSetDef py_file_content_getseters[] = {
+ { NULL }
+ };
+
+ static PyTypeObject py_file_content_type = {
+
+ PyVarObject_HEAD_INIT(NULL, 0)
+
+ .tp_name = "pychrysalide.analysis.contents.FileContent",
+ .tp_basicsize = sizeof(PyGObject),
+
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | 1 << 9,
+
+ .tp_doc = "PyChrysalide binary file content",
+
+ /*
+ .tp_methods = py_file_content_methods,
+ .tp_getset = py_file_content_getseters,
+ .tp_new = (newfunc)py_file_content_new
+ */
+
+ };
+#endif
+ return &py_file_content_type;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : module = module dont la définition est à compléter. *
+* *
+* Description : Prend en charge l'objet 'pychrysalide.glibext.BinContent'. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+#include "../content.h"
+bool register_python_file_content(PyObject *module)
+{
+ PyTypeObject *py_file_content_type; /* Type Python 'BinContent' */
+ int ret; /* Bilan d'un appel */
+ PyObject *dict; /* Dictionnaire du module */
+
+ py_file_content_type = get_python_file_content_type();
+
+ //py_file_content_type->tp_base = &PyGObject_Type;
+ //py_file_content_type->tp_basicsize = py_file_content_type->tp_base->tp_basicsize;
+
+ /*
+ if (PyType_Ready(py_file_content_type) != 0)
+ return false;
+ */
+
+ /*
+ Py_INCREF(py_file_content_type);
+ ret = PyModule_AddObject(module, "FileContent", (PyObject *)py_file_content_type);
+ if (ret != 0) return false;
+ */
+
+ dict = PyModule_GetDict(module);
+ pygobject_register_class(dict, "FileContent", G_TYPE_FILE_CONTENT, py_file_content_type,
+ Py_BuildValue("(O)", &PyGObject_Type/*py_file_content_type->tp_base*/,
+ get_python_binary_content_type()));
+
+ /*
+ if (PyType_Ready(py_file_content_type) != 0)
+ return false;
+ */
+
+
+ return true;
+
+}
diff --git a/plugins/pychrysa/analysis/contents/file.h b/plugins/pychrysa/analysis/contents/file.h
new file mode 100644
index 0000000..a9edcef
--- /dev/null
+++ b/plugins/pychrysa/analysis/contents/file.h
@@ -0,0 +1,42 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * file.h - prototypes pour l'équivalent Python du fichier "analysis/contents/file.h"
+ *
+ * Copyright (C) 2015 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_PYCHRYSA_ANALYSIS_CONTENTS_FILE_H
+#define _PLUGINS_PYCHRYSA_ANALYSIS_CONTENTS_FILE_H
+
+
+#include <Python.h>
+#include <stdbool.h>
+
+
+
+/* Fournit un accès à une définition de type à diffuser. */
+PyTypeObject *get_python_file_content_type(void);
+
+/* Prend en charge l'objet 'pychrysalide.glibext.BinContent'. */
+bool register_python_file_content(PyObject *);
+
+
+
+#endif /* _PLUGINS_PYCHRYSA_ANALYSIS_CONTENTS_FILE_H */
diff --git a/plugins/pychrysa/analysis/contents/module.c b/plugins/pychrysa/analysis/contents/module.c
new file mode 100644
index 0000000..f97ba27
--- /dev/null
+++ b/plugins/pychrysa/analysis/contents/module.c
@@ -0,0 +1,92 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * module.c - intégration du répertoire contents en tant que module
+ *
+ * Copyright (C) 2013 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 "module.h"
+
+
+#include <assert.h>
+
+
+#include "file.h"
+
+
+
+/******************************************************************************
+* *
+* Paramètres : module = module dont la définition est à compléter. *
+* *
+* Description : Ajoute le module 'contents' au module Python. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+#include "../content.h"
+bool add_analysis_contents_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_contents_module = {
+
+ .m_base = PyModuleDef_HEAD_INIT,
+
+ .m_name = "pychrysalide.analysis.contents",
+ .m_doc = "Python module for Chrysalide.analysis.contents",
+
+ .m_size = -1,
+
+ };
+
+ result = false;
+
+ module = PyModule_Create(&py_chrysalide_contents_module);
+ if (module == NULL) return false;
+
+ ret = PyState_AddModule(super, &py_chrysalide_contents_module);
+ if (ret != 0) goto loading_failed;
+
+ ret = _PyImport_FixupBuiltin(module, "pychrysalide.analysis.contents");
+ if (ret != 0) goto loading_failed;
+
+ Py_INCREF(module);
+ ret = PyModule_AddObject(super, "contents", module);
+ if (ret != 0) goto loading_failed;
+
+ result = true;
+
+ result &= register_python_binary_content(module);
+
+
+ result &= register_python_file_content(module);
+
+ loading_failed:
+
+ assert(result);
+
+ return result;
+
+}
diff --git a/plugins/pychrysa/analysis/contents/module.h b/plugins/pychrysa/analysis/contents/module.h
new file mode 100644
index 0000000..35ff722
--- /dev/null
+++ b/plugins/pychrysa/analysis/contents/module.h
@@ -0,0 +1,39 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * module.h - prototypes pour l'intégration du répertoire contents en tant que module
+ *
+ * Copyright (C) 2013 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_PYOIDA_ANALYSIS_CONTENTS_MODULE_H
+#define _PLUGINS_PYOIDA_ANALYSIS_CONTENTS_MODULE_H
+
+
+#include <Python.h>
+#include <stdbool.h>
+
+
+
+/* Ajoute le module 'contents' au module Python. */
+bool add_analysis_contents_module_to_python_module(PyObject *);
+
+
+
+#endif /* _PLUGINS_PYOIDA_ANALYSIS_CONTENTS_MODULE_H */
diff --git a/plugins/pychrysa/analysis/module.c b/plugins/pychrysa/analysis/module.c
index d45a3f1..2520d42 100644
--- a/plugins/pychrysa/analysis/module.c
+++ b/plugins/pychrysa/analysis/module.c
@@ -30,9 +30,11 @@
#include "binary.h"
#include "block.h"
+#include "content.h"
#include "routine.h"
#include "binaries/module.h"
#include "blocks/module.h"
+#include "contents/module.h"
#include "db/module.h"
@@ -85,10 +87,12 @@ bool add_analysis_module_to_python_module(PyObject *super)
result &= register_python_loaded_binary(module);
result &= register_python_instr_block(module);
+ //result &= register_python_binary_content(module);
result &= register_python_binary_routine(module);
result &= add_analysis_binaries_module_to_python_module(module);
result &= add_analysis_blocks_module_to_python_module(module);
+ result &= add_analysis_contents_module_to_python_module(module);
result &= add_analysis_db_module_to_python_module(module);
loading_failed:
diff --git a/plugins/pychrysa/core/formats.c b/plugins/pychrysa/core/formats.c
new file mode 100644
index 0000000..5c10ba8
--- /dev/null
+++ b/plugins/pychrysa/core/formats.c
@@ -0,0 +1,190 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * formats.c - équivalent Python du fichier "core/formats.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 "formats.h"
+
+
+#include <pygobject.h>
+
+
+#include <core/formats.h>
+
+
+#include "../helpers.h"
+
+
+
+/* Fournit le nom humain du format binaire visé. */
+static PyObject *py_formats_get_binary_format_name(PyObject *, PyObject *);
+
+/* Définit les constantes pour les paramètres. */
+static bool py_formats_define_constants(PyTypeObject *);
+
+
+
+/******************************************************************************
+* *
+* Paramètres : self = NULL car méthode statique. *
+* args = non utilisé ici. *
+* *
+* Description : Fournit le nom humain du format binaire visé. *
+* *
+* Retour : Désignation humaine trouvée ou None. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static PyObject *py_formats_get_binary_format_name(PyObject *self, PyObject *args)
+{
+ PyObject *result; /* Désignation à retourner */
+ const char *key; /* Nom court du format */
+ int ret; /* Bilan de lecture des args. */
+ const char *name; /* Désignation humaine */
+
+ ret = PyArg_ParseTuple(args, "s", &key);
+ if (!ret) return NULL;
+
+ name = get_binary_format_name(key);
+
+ if (name != NULL)
+ result = PyUnicode_FromString(name);
+
+ else
+ {
+ result = Py_None;
+ Py_INCREF(result);
+ }
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : - *
+* *
+* Description : Fournit un accès à une définition de type à diffuser. *
+* *
+* Retour : Définition d'objet pour Python. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+PyTypeObject *get_python_formats_type(void)
+{
+ static PyMethodDef py_formats_methods[] = {
+
+ { "get_binary_format_name", py_formats_get_binary_format_name,
+ METH_VARARGS | METH_STATIC,
+ "get_binary_format_name(key, /)\n--\n\nGive access to the main configuration of Chrysalide."
+ },
+ { NULL }
+
+ };
+
+ static PyTypeObject py_formats_type = {
+
+ PyVarObject_HEAD_INIT(NULL, 0)
+
+ .tp_name = "pychrysalide.core.formats",
+ .tp_basicsize = sizeof(PyObject),
+
+ .tp_flags = Py_TPFLAGS_DEFAULT,
+
+ .tp_doc = "Python object for parameters",
+
+ .tp_methods = py_formats_methods
+
+ };
+
+ return &py_formats_type;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : obj_type = type dont le dictionnaire est à compléter. *
+* *
+* Description : Définit les constantes pour les paramètres. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static bool py_formats_define_constants(PyTypeObject *obj_type)
+{
+ bool result; /* Bilan à retourner */
+
+ result = true;
+
+ result &= PyDict_AddIntMacro(obj_type, FMS_MATCHED);
+ result &= PyDict_AddIntMacro(obj_type, FMS_FORWARDED);
+ result &= PyDict_AddIntMacro(obj_type, FMS_UNKNOWN);
+
+ result &= PyDict_AddIntMacro(obj_type, FMS_COUNT);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : module = module dont la définition est à compléter. *
+* *
+* Description : Prend en charge l'objet 'pychrysalide.core.formats'. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool register_python_formats(PyObject *module)
+{
+ PyTypeObject *py_formats_type; /* Type Python pour 'formats' */
+ int ret; /* Bilan d'un appel */
+
+ py_formats_type = get_python_formats_type();
+
+ py_formats_type->tp_new = PyType_GenericNew;
+
+ if (PyType_Ready(py_formats_type) != 0)
+ return false;
+
+ if (!py_formats_define_constants(py_formats_type))
+ return false;
+
+ Py_INCREF(py_formats_type);
+ ret = PyModule_AddObject(module, "formats", (PyObject *)py_formats_type);
+
+ return (ret == 0);
+
+}
diff --git a/plugins/pychrysa/core/formats.h b/plugins/pychrysa/core/formats.h
new file mode 100644
index 0000000..f4fe2db
--- /dev/null
+++ b/plugins/pychrysa/core/formats.h
@@ -0,0 +1,42 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * formats.h - prototypes pour l'équivalent Python du fichier "core/formats.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_CORE_FORMATS_H
+#define _PLUGINS_PYCHRYSALIDE_CORE_FORMATS_H
+
+
+#include <Python.h>
+#include <stdbool.h>
+
+
+
+/* Fournit un accès à une définition de type à diffuser. */
+PyTypeObject *get_python_formats_type(void);
+
+/* Prend en charge l'objet 'pychrysalide.core.formats'. */
+bool register_python_formats(PyObject *);
+
+
+
+#endif /* _PLUGINS_PYCHRYSALIDE_CORE_FORMATS_H */
diff --git a/plugins/pychrysa/format/dex/dex.c b/plugins/pychrysa/format/dex/dex.c
index a11af52..08c48f0 100644
--- a/plugins/pychrysa/format/dex/dex.c
+++ b/plugins/pychrysa/format/dex/dex.c
@@ -33,7 +33,7 @@
#include "../executable.h"
-#include "../../glibext/bincontent.h"
+#include "../../analysis/content.h"
diff --git a/plugins/pychrysa/format/elf/elf.c b/plugins/pychrysa/format/elf/elf.c
index a292c91..07e5130 100644
--- a/plugins/pychrysa/format/elf/elf.c
+++ b/plugins/pychrysa/format/elf/elf.c
@@ -32,7 +32,7 @@
#include "../executable.h"
-#include "../../glibext/bincontent.h"
+#include "../../analysis/content.h"
diff --git a/plugins/pychrysa/glibext/Makefile.am b/plugins/pychrysa/glibext/Makefile.am
index 0a61da2..74def8a 100644
--- a/plugins/pychrysa/glibext/Makefile.am
+++ b/plugins/pychrysa/glibext/Makefile.am
@@ -2,7 +2,6 @@
noinst_LTLIBRARIES = libpychrysaglibext.la
libpychrysaglibext_la_SOURCES = \
- bincontent.h bincontent.c \
bufferline.h bufferline.c \
codebuffer.h codebuffer.c \
configuration.h configuration.c \
diff --git a/plugins/pychrysa/glibext/module.c b/plugins/pychrysa/glibext/module.c
index 0cb96a7..b34b91e 100644
--- a/plugins/pychrysa/glibext/module.c
+++ b/plugins/pychrysa/glibext/module.c
@@ -28,7 +28,6 @@
#include <assert.h>
-#include "bincontent.h"
#include "bufferline.h"
#include "codebuffer.h"
#include "configuration.h"
@@ -81,7 +80,6 @@ bool add_glibext_module_to_python_module(PyObject *super)
result = true;
- result &= register_python_binary_content(module);
result &= register_python_buffer_line(module);
result &= register_python_code_buffer(module);
result &= register_python_config_param(module);
diff --git a/plugins/ropgadgets/select.c b/plugins/ropgadgets/select.c
index 514b6ca..53995e5 100644
--- a/plugins/ropgadgets/select.c
+++ b/plugins/ropgadgets/select.c
@@ -36,6 +36,7 @@
#include <analysis/project.h>
+#include <analysis/contents/file.h>
#include <common/cpp.h>
#include <common/extstr.h>
#include <core/formats.h>
@@ -1326,7 +1327,7 @@ static GBinFormat *load_external_format_for_rop_gadgets(GObject *ref)
/* Récupération du contenu binaire */
- content = g_binary_content_new_from_file(filename);
+ content = g_file_content_new(filename);
if (content == NULL)
{
push_status_printing_of_rop_search_step(ref, "loading", _("unable to get the binary content"), false);