From 398c8a5b054072a6d4ecdd5d2c2df356dddaf53a Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Thu, 28 Jun 2018 18:59:30 +0200
Subject: Replaced all calls to the old API dealing with routine location.

---
 plugins/androhelpers/params.c      |  6 ++++--
 plugins/androhelpers/switch.c      |  6 ++++--
 plugins/androhelpers/try_n_catch.c | 17 ++++++++++++-----
 plugins/dalvik/context.c           |  8 ++++++--
 plugins/stackvars/stackvars.c      |  7 +++++--
 src/analysis/decomp/decompiler.c   |  6 +++---
 src/analysis/decomp/il.c           |  4 +++-
 src/analysis/routine.h             | 21 ---------------------
 8 files changed, 37 insertions(+), 38 deletions(-)

diff --git a/plugins/androhelpers/params.c b/plugins/androhelpers/params.c
index 26f4265..0c20c8d 100644
--- a/plugins/androhelpers/params.c
+++ b/plugins/androhelpers/params.c
@@ -131,6 +131,7 @@ static void process_args_operand(const GDexMethod *method, const GDalvikArgsOper
 static void visit_all_method_operands(const GDexMethod *method, GArchInstruction *instrs)
 {
     GBinRoutine *routine;                   /* Abstraction de la méthode   */
+    const mrange_t *range;                  /* Emplacement du symbole      */
     vmpa_t start;                           /* Début de la zone couverte   */
     vmpa_t end;                             /* Fin de la zone couverte     */
     GArchInstruction *iter;                 /* Boucle de parcours #1       */
@@ -139,9 +140,10 @@ static void visit_all_method_operands(const GDexMethod *method, GArchInstruction
     GArchOperand *operand;                  /* Operande à manipuler        */
 
     routine = g_dex_method_get_routine(method);
+    range = g_binary_symbol_get_range(G_BIN_SYMBOL(routine));
 
-    start = g_binary_routine_get_address(routine);
-    end = start + g_binary_routine_get_size(routine);
+    start = get_mrange_addr(range)->virtual;
+    end = start + get_mrange_length(range);
 
     g_object_unref(G_OBJECT(routine));
 
diff --git a/plugins/androhelpers/switch.c b/plugins/androhelpers/switch.c
index 2ef6277..57e3830 100644
--- a/plugins/androhelpers/switch.c
+++ b/plugins/androhelpers/switch.c
@@ -333,6 +333,7 @@ static void mark_all_switch_cases(const GArchInstruction *instr, const dex_switc
 static void look_for_switch_instructions(const GDexMethod *method, GArchInstruction *instrs, const GLoadedBinary *binary, const GDexFormat *format, bool link)
 {
     GBinRoutine *routine;                   /* Abstraction de la méthode   */
+    const mrange_t *range;                  /* Emplacement du symbole      */
     vmpa_t start;                           /* Début de la zone couverte   */
     vmpa_t end;                             /* Fin de la zone couverte     */
     GArchInstruction *iter;                 /* Boucle de parcours          */
@@ -340,9 +341,10 @@ static void look_for_switch_instructions(const GDexMethod *method, GArchInstruct
     dex_switch dswitch;                     /* Infos d'aiguillage          */
 
     routine = g_dex_method_get_routine(method);
+    range = g_binary_symbol_get_range(G_BIN_SYMBOL(routine));
 
-    start = g_binary_routine_get_address(routine);
-    end = start + g_binary_routine_get_size(routine);
+    start = get_mrange_addr(range)->virtual;
+    end = start + get_mrange_length(range);
 
     g_object_unref(G_OBJECT(routine));
 
diff --git a/plugins/androhelpers/try_n_catch.c b/plugins/androhelpers/try_n_catch.c
index 1fa3971..811f8c5 100644
--- a/plugins/androhelpers/try_n_catch.c
+++ b/plugins/androhelpers/try_n_catch.c
@@ -80,13 +80,14 @@ static bool check_covered_area(const try_item *try, const GBinRoutine *routine)
     off_t length;                           /* Taille de la zone de code   */
     vmpa_t covered_start;                   /* Début de la zone couverte   */
     vmpa_t covered_end;                     /* Fin de la zone couverte     */
-
-    length = g_binary_routine_get_size(routine);
+    const mrange_t *range;                  /* Emplacement du symbole      */
 
     covered_start = try->start_addr * sizeof(uint16_t);
     covered_end = covered_start + try->insn_count * sizeof(uint16_t);
 
-    return (covered_end <= length);
+    range = g_binary_symbol_get_range(G_BIN_SYMBOL(routine));
+
+    return (covered_end <= get_mrange_length(range));
 
 }
 
@@ -109,6 +110,7 @@ static bool check_covered_area(const try_item *try, const GBinRoutine *routine)
 
 static void attach_caught_code(const GLoadedBinary *binary, const GBinRoutine *routine, const try_item *try, const caught_exception *handlers, size_t count)
 {
+    const mrange_t *range;                  /* Emplacement du symbole      */
     vmpa_t start;                           /* Début de la zone couverte   */
     vmpa_t end;                             /* Fin de la zone couverte     */
     GArchProcessor *proc;                   /* Processeur de l'architecture*/
@@ -119,7 +121,9 @@ static void attach_caught_code(const GLoadedBinary *binary, const GBinRoutine *r
     GArchInstruction *iter;                 /* Boucle de parcours #1       */
     size_t i;                               /* Boucle de parcours #2       */
 
-    start = g_binary_routine_get_address(routine);
+    range = g_binary_symbol_get_range(G_BIN_SYMBOL(routine));
+
+    start = get_mrange_addr(range)->virtual;
     start += try->start_addr * sizeof(uint16_t);
 
     end = start + try->insn_count * sizeof(uint16_t);
@@ -236,6 +240,7 @@ static void mark_exception_handlers(const GLoadedBinary *binary, uleb128_t size,
 
 static caught_exception **build_all_destinations_list(const GLoadedBinary *binary, const GBinRoutine *routine, const encoded_catch_handler_list *hlist, size_t **count)
 {
+    const mrange_t *range;                  /* Emplacement du symbole      */
     caught_exception **result;              /* Liste de listes à retourner */
     vmpa_t start;                           /* Début du code de la routine */
     GDexFormat *format;                     /* Format du binaire chargé    */
@@ -248,7 +253,9 @@ static caught_exception **build_all_destinations_list(const GLoadedBinary *binar
     caught_exception *excep;                /* Raccourci confortable       */
     GDataType *type;                        /* Type de l'exception         */
 
-    start = g_binary_routine_get_address(routine);
+    range = g_binary_symbol_get_range(G_BIN_SYMBOL(routine));
+
+    start = get_mrange_addr(range)->virtual;
 
     format = G_DEX_FORMAT(g_loaded_binary_get_format(binary));
 
diff --git a/plugins/dalvik/context.c b/plugins/dalvik/context.c
index 752e831..70cbee5 100644
--- a/plugins/dalvik/context.c
+++ b/plugins/dalvik/context.c
@@ -664,14 +664,16 @@ static void g_dalvik_context_spread_allocated_shared_reg(GDalvikDContext *ctx, G
 {
     GDexFormat *format;                     /* Recherche de méthode        */
     GBinRoutine *routine;                   /* Objet des recherches        */
+    const mrange_t *range;                  /* Emplacement du symbole      */
     GDexMethod *method;                     /* Méthode décompilée          */
     uint16_t index;                         /* Identifiant du registre     */
     DexVariableIndex info;                  /* Nature du registre          */
 
     format = G_DEX_FORMAT(G_DEC_CONTEXT(ctx)->format);
     routine = G_DEC_CONTEXT(ctx)->routine;
+    range = g_binary_symbol_get_range(G_BIN_SYMBOL(routine));
 
-    method = g_dex_format_find_method_by_address(format, g_binary_routine_get_address(routine));
+    method = g_dex_format_find_method_by_address(format, get_mrange_addr(range));
 
     index = g_dalvik_register_get_index(reg);
     info = g_dex_method_get_variable(method, index);
@@ -703,6 +705,7 @@ static GDecInstruction *g_dalvik_dcontext_convert_register(GDalvikDContext *ctx,
     GDecInstruction *result;                /* Instance à retourner        */
     GDexFormat *format;                     /* Recherche de méthode        */
     GBinRoutine *routine;                   /* Objet des recherches        */
+    const mrange_t *range;                  /* Emplacement du symbole      */
     GDexMethod *method;                     /* Méthode décompilée          */
     const GDalvikRegister *reg;             /* Registre Dalvik représenté  */
     uint16_t index;                         /* Identifiant du registre     */
@@ -712,8 +715,9 @@ static GDecInstruction *g_dalvik_dcontext_convert_register(GDalvikDContext *ctx,
 
     format = G_DEX_FORMAT(G_DEC_CONTEXT(ctx)->format);
     routine = G_DEC_CONTEXT(ctx)->routine;
+    range = g_binary_symbol_get_range(G_BIN_SYMBOL(routine));
 
-    method = g_dex_format_find_method_by_address(format, g_binary_routine_get_address(routine));
+    method = g_dex_format_find_method_by_address(format, get_mrange_addr(range));
 
     reg = g_dalvik_register_operand_get(operand);
 
diff --git a/plugins/stackvars/stackvars.c b/plugins/stackvars/stackvars.c
index 87ecf05..b440348 100644
--- a/plugins/stackvars/stackvars.c
+++ b/plugins/stackvars/stackvars.c
@@ -139,6 +139,7 @@ G_MODULE_EXPORT bool execute_action_on_binary(GLoadedBinary *binary, PluginActio
 static bool replace_stack_vars_in_routine(GBinRoutine *routine, GRenderingLine *lines)
 {
     bool result;                            /* Bilan à retourner           */
+    const mrange_t *range;                  /* Emplacement du symbole      */
     vmpa_t start;                           /* Adresse de début de routine */
     vmpa_t end;                             /* Adresse de fin de routine   */
     GRenderingLine *iter;                   /* Boucle de parcours          */
@@ -146,8 +147,10 @@ static bool replace_stack_vars_in_routine(GBinRoutine *routine, GRenderingLine *
 
     result = false;
 
-    start = g_binary_routine_get_address(routine);
-    end = start + g_binary_routine_get_size(routine);
+    range = g_binary_symbol_get_range(G_BIN_SYMBOL(routine));
+
+    start = get_mrange_addr(range)->virtual;
+    end = start + get_mrange_length(range);
 
     for (iter = g_rendering_line_find_by_address(lines, NULL, start);
          iter != NULL && get_rendering_line_address(iter) < end;
diff --git a/src/analysis/decomp/decompiler.c b/src/analysis/decomp/decompiler.c
index 432e924..03d2b70 100644
--- a/src/analysis/decomp/decompiler.c
+++ b/src/analysis/decomp/decompiler.c
@@ -169,8 +169,8 @@ static void prepare_all_routines_for_decomp(const GLoadedBinary *binary, const c
         /*
         instrs = g_binary_routine_get_instructions(routines[i]);
 
-        max = g_binary_routine_get_address(routines[i])
-            + g_binary_routine_get_size(routines[i]);
+        max = g_XXX_binary_routine_get_address(routines[i])
+            + g_XXX_binary_routine_get_size(routines[i]);
         */
         //printf("\n##### DECOMPILE '%s' #####\n", g_binary_routine_to_string(routines[i]));
 
@@ -179,7 +179,7 @@ static void prepare_all_routines_for_decomp(const GLoadedBinary *binary, const c
 
         /*
         dinstrs = build_decompiled_block(instrs,
-                                         g_binary_routine_get_address(routines[i]),
+                                         g_XXX_binary_routine_get_address(routines[i]),
                                          max, VMPA_MAX, context);
         */
 
diff --git a/src/analysis/decomp/il.c b/src/analysis/decomp/il.c
index c125412..5827c4b 100644
--- a/src/analysis/decomp/il.c
+++ b/src/analysis/decomp/il.c
@@ -485,13 +485,15 @@ GDecInstruction *decompiled_routine_instructions(GBinRoutine *routine, GExeForma
     GDecInstruction *result;                /* Instructions à retourner    */
     GDecContext *context;                   /* Contexte pour la décompil.  */
     GInstrBlock *blocks;                    /* Blocs basiques de routine   */
+    const mrange_t *range;                  /* Emplacement du symbole      */
 
     context = g_arch_processor_get_decomp_context(proc);
     g_dec_context_set_info(context, routine, format);
 
     blocks = g_binary_routine_get_basic_blocks(routine);
 
-    setup_awaited_regs_allocation(blocks, g_binary_routine_get_address(routine));
+    range = g_binary_symbol_get_range(G_BIN_SYMBOL(routine));
+    setup_awaited_regs_allocation(blocks, get_mrange_addr(range)->physical);
 
     result = decompiled_basic_block(blocks, context);
 
diff --git a/src/analysis/routine.h b/src/analysis/routine.h
index 7a836cf..e364c93 100644
--- a/src/analysis/routine.h
+++ b/src/analysis/routine.h
@@ -82,27 +82,6 @@ GBinRoutine *g_binary_routine_new(void);
 /* Crée une représentation de routine construisant une instance. */
 GBinRoutine *g_binary_routine_new_constructor(GDataType *);
 
-/* Définit la couverture physique / en mémoire d'une routine. */
-void g_binary_routine_set_range(GBinRoutine *, const mrange_t *);
-
-/* Fournit la couverture physique / en mémoire d'une routine. */
-const mrange_t *g_binary_routine_get_range(const GBinRoutine *);
-
-
-
-/* Fournit la position physique / en mémoire d'une routine. */
-//const vmpa2t *g_binary_routine_get_address(const GBinRoutine *);
-#define g_binary_routine_get_address(r) 0
-
-/* Définit la taille du code d'une routine. */
-void g_binary_routine_set_size(GBinRoutine *, off_t);
-
-/* Fournit la taille du code associé à une routine. */
-//off_t g_binary_routine_get_size(const GBinRoutine *);
-#define g_binary_routine_get_size(r) 0
-
-
-
 /* Définit le type d'une routine. */
 void g_binary_routine_set_type(GBinRoutine *, RoutineType);
 
-- 
cgit v0.11.2-87-g4458