summaryrefslogtreecommitdiff
path: root/plugins/pychrysa
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/pychrysa')
-rw-r--r--plugins/pychrysa/analysis/db/items/comment.c2
-rw-r--r--plugins/pychrysa/arch/processor.c49
2 files changed, 43 insertions, 8 deletions
diff --git a/plugins/pychrysa/analysis/db/items/comment.c b/plugins/pychrysa/analysis/db/items/comment.c
index 936d7cb..4a90f09 100644
--- a/plugins/pychrysa/analysis/db/items/comment.c
+++ b/plugins/pychrysa/analysis/db/items/comment.c
@@ -144,7 +144,7 @@ static int py_db_comment_set_text(PyObject *self, PyObject *value, void *closure
}
comment = G_DB_COMMENT(pygobject_get(self));
- g_db_comment_set_text(comment, PyUnicode_DATA(value));
+ //g_db_comment_set_text(comment, PyUnicode_DATA(value));
return 0;
diff --git a/plugins/pychrysa/arch/processor.c b/plugins/pychrysa/arch/processor.c
index 63d93c5..c3d744b 100644
--- a/plugins/pychrysa/arch/processor.c
+++ b/plugins/pychrysa/arch/processor.c
@@ -25,6 +25,7 @@
#include "processor.h"
+#include <malloc.h>
#include <pygobject.h>
@@ -65,6 +66,9 @@
/* Fournit les instructions désassemblées pour une architecture. */
static PyObject *py_arch_processor_get_instrs(PyObject *, void *);
+/* Note les instructions désassemblées avec une architecture. */
+static int py_arch_processor_set_instrs(PyObject *, PyObject *, void *);
+
/* Recherche une instruction d'après son adresse. */
static PyObject *py_arch_processor_find_instr_by_addr(PyObject *, PyObject *);
@@ -121,24 +125,55 @@ static PyObject *py_arch_processor_get_instrs(PyObject *self, void *closure)
* *
******************************************************************************/
-static int py_arch_processor_set_disass_instrs(PyObject *self, PyObject *value, void *closure)
+static int py_arch_processor_set_instrs(PyObject *self, PyObject *value, void *closure)
{
+ size_t count; /* Nombre d'instructions */
+ GArchInstruction **list; /* Liste d'instructions */
+ size_t i; /* Boucle de parcours */
+ PyObject *instr; /* Instruction en Python */
GArchProcessor *proc; /* Architecture visée */
- GArchInstruction *instrs; /* Série d'instructions liées */
- if (!PyObject_TypeCheck(value, get_python_arch_instruction_type()))
+ if (!PyTuple_Check(value))
{
- PyErr_SetString(PyExc_TypeError, _("The attribute value must be an instruction."));
+ PyErr_SetString(PyExc_TypeError, _("The attribute value must be a tuple of instructions."));
return -1;
}
+ count = PyTuple_Size(value);
+
+ list = (GArchInstruction **)calloc(count, sizeof(GArchInstruction *));
+
+ for (i = 0; i < count; i++)
+ {
+ instr = PyTuple_GetItem(value, i);
+
+ if (!PyObject_TypeCheck(value, get_python_arch_instruction_type()))
+ {
+ PyErr_SetString(PyExc_TypeError, _("The attribute value must be a tuple of instructions."));
+ count = i;
+ goto papsi_error;
+ }
+
+ list[i] = G_ARCH_INSTRUCTION(pygobject_get(instr));
+ g_object_ref(G_OBJECT(list[i]));
+
+ }
+
proc = G_ARCH_PROCESSOR(pygobject_get(self));
- instrs = G_ARCH_INSTRUCTION(pygobject_get(value));
- g_arch_processor_set_disassembled_instructions(proc, instrs);
+ g_arch_processor_set_instructions(proc, list, count);
return 0;
+ papsi_error:
+
+ for (i = 0; i < count; i++)
+ g_object_unref(G_OBJECT(list[i]));
+
+ free(list);
+
+ return -1;
+
}
@@ -217,7 +252,7 @@ PyTypeObject *get_python_arch_processor_type(void)
static PyGetSetDef py_arch_processor_getseters[] = {
{
- "instrs", py_arch_processor_get_instrs, py_arch_processor_set_disass_instrs,
+ "instrs", py_arch_processor_get_instrs, py_arch_processor_set_instrs,
"Give access to the disassembled instructions run by the current processor.", NULL
},
{ NULL }