summaryrefslogtreecommitdiff
path: root/src/analysis/routine.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/routine.c')
-rw-r--r--src/analysis/routine.c173
1 files changed, 117 insertions, 56 deletions
diff --git a/src/analysis/routine.c b/src/analysis/routine.c
index c26886f..a21b6e7 100644
--- a/src/analysis/routine.c
+++ b/src/analysis/routine.c
@@ -723,6 +723,90 @@ size_t g_binary_routine_get_var_index_from_offset(const GBinRoutine *routine, si
* *
* Paramètres : routine = routine à consulter. *
* *
+* Description : Fournit les instructions natives correspondantes. *
+* *
+* Retour : Ensemble d'instructions décompilées ou NULL. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GArchInstruction *g_binary_routine_get_instructions(const GBinRoutine *routine)
+{
+ return routine->instr;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : routine = routine à mettre à jour. *
+* instr = série d'instructions à conserver. *
+* *
+* Description : Définit les instructions natives de la routine. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_binary_routine_set_instructions(GBinRoutine *routine, GArchInstruction *instr)
+{
+ if (routine->instr != NULL)
+ g_object_unref(G_OBJECT(routine->instr));
+
+ routine->instr = instr;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : routine = routine à consulter. *
+* *
+* Description : Fournit les instructions décompilées correspondantes. *
+* *
+* Retour : Ensemble d'instructions décompilées ou NULL. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GDecInstruction *g_binary_routine_get_decomp_instructions(const GBinRoutine *routine)
+{
+ return routine->dinstr;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : routine = routine à mettre à jour. *
+* instr = série d'instructions à conserver. *
+* *
+* Description : Définit les instructions décompilées de la routine. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_binary_routine_set_decomp_instructions(GBinRoutine *routine, GDecInstruction *instr)
+{
+ if (routine->dinstr != NULL)
+ g_object_unref(G_OBJECT(routine->dinstr));
+
+ routine->dinstr = instr;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : routine = routine à consulter. *
+* *
* Description : Décrit le prototype de la routine sous forme de caractères. *
* *
* Retour : Chaîne de caractères à libérer de la mémoire. *
@@ -803,84 +887,61 @@ char *_g_binary_routine_to_string(const GBinRoutine *routine, Routine2StringOpti
/******************************************************************************
* *
-* Paramètres : routine = routine à consulter. *
+* Paramètres : routine = routine à afficher. *
+* lang = langage à utiliser pour la sortie humaine. *
+* buffer = tampon mis à disposition pour la sortie. *
* *
-* Description : Fournit les instructions natives correspondantes. *
+* Description : Procède à l'impression de la description d'une routine. *
* *
-* Retour : Ensemble d'instructions décompilées ou NULL. *
+* Retour : - *
* *
* Remarques : - *
* *
******************************************************************************/
-GArchInstruction *g_binary_routine_get_instructions(const GBinRoutine *routine)
+void g_binary_routine_output_info(const GBinRoutine *routine, GLangOutput *lang, GCodeBuffer *buffer)
{
- return routine->instr;
+ GBufferLine *line; /* Adresse d'une ligne nouvelle*/
+ const char *name; /* Nom humain de la routine */
+ size_t len; /* Taille de ce nom */
+ size_t i; /* Boucle de parcours */
-}
+ /* Type de retour */
+ line = g_lang_output_start_routine_info(lang, buffer);
-/******************************************************************************
-* *
-* Paramètres : routine = routine à mettre à jour. *
-* instr = série d'instructions à conserver. *
-* *
-* Description : Définit les instructions natives de la routine. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
+ g_data_type_output(routine->ret_type, lang, line, true, false);
-void g_binary_routine_set_instructions(GBinRoutine *routine, GArchInstruction *instr)
-{
- if (routine->instr != NULL)
- g_object_unref(G_OBJECT(routine->instr));
+ g_buffer_line_insert_text(line, BLC_LAST_USED, " ", 1, RTT_COMMENT);
- routine->instr = instr;
+ /* Nom de la routine */
-}
+ name = g_binary_routine_get_name(routine);
+ if (name != NULL) len = strlen(name);
+ else
+ {
+ name = "???";
+ len = 3;
+ }
+ g_buffer_line_insert_text(line, BLC_LAST_USED, name, len, RTT_COMMENT);
-/******************************************************************************
-* *
-* Paramètres : routine = routine à consulter. *
-* *
-* Description : Fournit les instructions décompilées correspondantes. *
-* *
-* Retour : Ensemble d'instructions décompilées ou NULL. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
+ /* Arguments éventuels... */
-GDecInstruction *g_binary_routine_get_decomp_instructions(const GBinRoutine *routine)
-{
- return routine->dinstr;
+ g_buffer_line_insert_text(line, BLC_LAST_USED, "(", 1, RTT_COMMENT);
-}
+ for (i = 0; i < routine->args_count; i++)
+ {
+ if (i > 0)
+ g_buffer_line_insert_text(line, BLC_LAST_USED, ", ", 2, RTT_COMMENT);
+ g_binary_variable_output(routine->args[i], lang, line, true, false);
-/******************************************************************************
-* *
-* Paramètres : routine = routine à mettre à jour. *
-* instr = série d'instructions à conserver. *
-* *
-* Description : Définit les instructions décompilées de la routine. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
+ }
-void g_binary_routine_set_decomp_instructions(GBinRoutine *routine, GDecInstruction *instr)
-{
- if (routine->dinstr != NULL)
- g_object_unref(G_OBJECT(routine->dinstr));
+ g_buffer_line_insert_text(line, BLC_LAST_USED, ")", 1, RTT_COMMENT);
- routine->dinstr = instr;
+ //g_lang_output_end_routine_prototype(lang, buffer, line);
}