summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-08-03 11:24:26 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-08-03 11:24:26 (GMT)
commit4d179bc994cf85832d08f468c7e4122ad23e9244 (patch)
tree3348d3c001c961e9e464a644c12c9fc85e78d9b5 /plugins
parent77735c8c77497498e3beb4f5bcec7de3b592fcbd (diff)
Updated the reference counters when providing instruction links.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/libcsem/exit.c7
-rw-r--r--plugins/lnxsyscalls/collect.c4
-rw-r--r--plugins/pychrysalide/arch/instruction.c8
3 files changed, 13 insertions, 6 deletions
diff --git a/plugins/libcsem/exit.c b/plugins/libcsem/exit.c
index ee536b5..794369e 100644
--- a/plugins/libcsem/exit.c
+++ b/plugins/libcsem/exit.c
@@ -54,7 +54,7 @@ static void mark_one_kind_of_exit_as_return(const GLoadedBinary *binary, const c
GArchInstruction *instr; /* Instruction de sortie */
size_t count; /* Nbre de sources affichées */
size_t i; /* Boucle de parcours */
- instr_link_t *source; /* Instruction diverse liée */
+ const instr_link_t *source; /* Instruction diverse liée */
format = G_BIN_FORMAT(g_loaded_binary_get_format(binary));
@@ -81,9 +81,10 @@ static void mark_one_kind_of_exit_as_return(const GLoadedBinary *binary, const c
{
source = g_arch_instruction_get_source(instr, i);
- if (source->type != ILT_CALL) continue;
+ if (source->type == ILT_CALL)
+ g_arch_instruction_set_flag(source->linked, AIF_RETURN_POINT);
- g_arch_instruction_set_flag(source->linked, AIF_RETURN_POINT);
+ unref_instr_link(source);
}
diff --git a/plugins/lnxsyscalls/collect.c b/plugins/lnxsyscalls/collect.c
index 87f5fa2..e73b444 100644
--- a/plugins/lnxsyscalls/collect.c
+++ b/plugins/lnxsyscalls/collect.c
@@ -488,7 +488,7 @@ bool look_for_registers(tracked_path *path, size_t sid, GArchProcessor *proc, co
size_t count; /* Nombre de sources présentes */
bool first; /* Premier aiguillage ? */
size_t i; /* Boucle de parcours */
- instr_link_t *link; /* Détails d'un lien */
+ const instr_link_t *link; /* Détails d'un lien */
size_t next; /* Indice de la pile suivante */
stack = &path->stacks[sid];
@@ -589,6 +589,8 @@ bool look_for_registers(tracked_path *path, size_t sid, GArchProcessor *proc, co
}
+ unref_instr_link(link);
+
}
g_arch_instruction_unlock_src(instr);
diff --git a/plugins/pychrysalide/arch/instruction.c b/plugins/pychrysalide/arch/instruction.c
index e9a2e04..8c3d78d 100644
--- a/plugins/pychrysalide/arch/instruction.c
+++ b/plugins/pychrysalide/arch/instruction.c
@@ -110,7 +110,7 @@ static PyObject *py_arch_instruction_get_sources(PyObject *self, void *unused)
{
PyObject *result; /* Instance à retourner */
GArchInstruction *instr; /* Version native */
- instr_link_t *source; /* Origine des liens */
+ const instr_link_t *source; /* Origine des liens */
size_t count; /* Nombre de liens présents */
size_t i; /* Boucle de parcours */
PyObject *linked; /* Source de lien Python */
@@ -135,6 +135,8 @@ static PyObject *py_arch_instruction_get_sources(PyObject *self, void *unused)
ret = PyTuple_SetItem(result, i, Py_BuildValue("(OO)", linked, type));
assert(ret == 0);
+ unref_instr_link(source);
+
}
g_arch_instruction_unlock_src(instr);
@@ -161,7 +163,7 @@ static PyObject *py_arch_instruction_get_destinations(PyObject *self, void *unus
{
PyObject *result; /* Instance à retourner */
GArchInstruction *instr; /* Version native */
- instr_link_t *dest; /* Destination des liens */
+ const instr_link_t *dest; /* Destination des liens */
size_t count; /* Nombre de liens présents */
size_t i; /* Boucle de parcours */
PyObject *linked; /* Destination de lien Python */
@@ -186,6 +188,8 @@ static PyObject *py_arch_instruction_get_destinations(PyObject *self, void *unus
ret = PyTuple_SetItem(result, i, Py_BuildValue("(OO)", linked, type));
assert(ret == 0);
+ unref_instr_link(dest);
+
}
g_arch_instruction_unlock_dest(instr);