diff options
| author | Cyrille Bagard <nocbos@gmail.com> | 2012-07-14 10:53:27 (GMT) | 
|---|---|---|
| committer | Cyrille Bagard <nocbos@gmail.com> | 2012-07-14 10:53:27 (GMT) | 
| commit | 9dad46d59fc491cac90795c418e3f973b85c2b4d (patch) | |
| tree | 00b2618f9001d104490ab385dabb99c268237a3f /src/analysis/binary.c | |
| parent | 9371129c1b7aa830ed889abd4481cb505d90c4a7 (diff) | |
Limited all routines using code from binary.c.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@250 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/analysis/binary.c')
| -rw-r--r-- | src/analysis/binary.c | 171 | 
1 files changed, 0 insertions, 171 deletions
diff --git a/src/analysis/binary.c b/src/analysis/binary.c index 45e6d31..2b84b57 100644 --- a/src/analysis/binary.c +++ b/src/analysis/binary.c @@ -60,22 +60,6 @@  /* ------------------------ DESASSEMBLAGE DE BINAIRE DIFFERE ------------------------ */ -#if 0 - - -/* S'assure que toutes les routines ont une taille définie. */ -static void limit_all_routines(GRenderingLine *, GBinRoutine **, size_t, GtkExtStatusBar *, guint); - -/* Cherche l'adresse de fin d'une routine. */ -static vmpa_t find_best_ending_address_for_routine(GRenderingLine *, size_t, const vmpa_t *, const off_t *, size_t); - - - -#endif - - - -  /* Description de fichier binaire (instance) */  struct _GOpenidaBinary  { @@ -149,161 +133,6 @@ static void g_openida_binary_breakpoint_added(GBreakGroup *, GBreakPoint *, GOpe  static void g_openida_binary_breakpoint_removed(GBreakGroup *, GBreakPoint *, GOpenidaBinary *); -#if 0 - - - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : lines     = lignes de rendu à parcourir.                     * -*                routines  = prototypes existants à insérer.                  * -*                count     = quantité de ces prototypes.                      * -*                statusbar = barre de statut avec progression à mettre à jour.* -*                id        = identifiant du message affiché à l'utilisateur.  * -*                                                                             * -*  Description : S'assure que toutes les routines ont une taille définie.     * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static void limit_all_routines(GRenderingLine *lines, GBinRoutine **routines, size_t count, GtkExtStatusBar *statusbar, guint id) -{ -    size_t i;                               /* Boucle de parcours          */ -    vmpa_t *starts;                         /* Adresses de départ          */ -    off_t *lengths;                         /* Tailles des routines        */ -    GRenderingLine *line;                   /* Ligne de départ / d'arrivée */ -    vmpa_t start;                           /* Adresse de début de routine */ -    vmpa_t last;                            /* Meilleur dernière adresse   */ -    GArchInstruction *instr;                /* Instruction à ausculter     */ -    off_t length;                           /* Taille du code              */ - -    if (count == 0) return; - -    starts = (vmpa_t *)calloc(count, sizeof(vmpa_t)); -    lengths = (off_t *)calloc(count, sizeof(off_t)); - -    for (i = 0; i < count; i++) -    { -        starts[i] = g_binary_routine_get_address(routines[i]); -        lengths[i] = g_binary_routine_get_size(routines[i]); - -        gtk_extended_status_bar_update_activity(statusbar, id, (i + 1) * 1.0 / (count * 2)); - -    } - -    for (i = 0; i < count; i++) -    { -        /* Instruction de départ */ - -        /* FIXME : faire mieux ! */ - -        line = g_rendering_line_find_by_address(lines, NULL, starts[i]); -        if (line != NULL) line = g_rendering_line_loop_for_code(line, NULL); - -        if (line != NULL) -        { -            instr = g_code_line_get_instruction(G_CODE_LINE(line)); - -            g_binary_routine_set_instructions(routines[i], instr); - -        } - - -        if (lengths[i] > 0) continue; - -        start = g_binary_routine_get_address(routines[i]); -        line = g_rendering_line_find_by_address(lines, NULL, start); - -        /* Si le symbole est hors du code analysé (routine de PLT par exemple) */ -        if (line == NULL) continue; - -        last = find_best_ending_address_for_routine(line, i, starts, lengths, count); - -        line = g_rendering_line_find_by_address(lines, NULL, last); -        line = g_rendering_line_loop_for_code(line, NULL); - -        instr = g_code_line_get_instruction(G_CODE_LINE(line)); -        g_arch_instruction_get_location(instr, NULL, &length, NULL); - -        lengths[i] = last - start + length; -        g_binary_routine_set_size(routines[i], lengths[i]); - -        gtk_extended_status_bar_update_activity(statusbar, id, (i + 1 + count) * 1.0 / (count * 2)); - -    } - -    free(starts); -    free(lengths); - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : line    = ligne de départ du parcours.                       * -*                index   = indice de la routine traitée dans la liste.        * -*                starts  = adresse de départ des autres routines.             * -*                lengths = taille des différentes routines, valides ou nulles.* -*                count   = quantité de routines présentes.                    * -*                                                                             * -*  Description : Cherche l'adresse de fin d'une routine.                      * -*                                                                             * -*  Retour      : Plus grande adresse de dernière instruction de routine.      * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static vmpa_t find_best_ending_address_for_routine(GRenderingLine *line, size_t index, const vmpa_t *starts, const off_t *lengths, size_t count) -{ -    vmpa_t result;                          /* Haute adresse à remonter    */ -    GRenderingLine *iter;                   /* Boucle de parcours #1       */ -    vmpa_t candidate;                       /* Candidat potentiel          */ -    size_t i;                               /* Boucle de parcours #2       */ -    GArchInstruction *instr;                /* Instruction à ausculter     */ - -    result = starts[index]; - -    for (iter = line; iter != NULL; iter = g_rendering_line_get_next_iter(line, iter, NULL)) -    { -        if (!G_IS_CODE_LINE(iter)) continue; - -        candidate = get_rendering_line_address(iter); - -        /* Regarde si on n'empiète pas sur une autre routine */ - -        for (i = 0; i < count; i++) -        { -            if (i == index) continue; - -            if (starts[i] <= candidate && candidate < (starts[i] + lengths[i])) -                break; - -        } - -        if (i != count) break; -        else result = candidate; - -        /* Retour de fonction ? */ - -        instr = g_code_line_get_instruction(G_CODE_LINE(iter)); -        if (g_arch_instruction_is_return(instr)) break; - -    } - -    return result; - -} - - -#endif - - -  /* Indique le type défini pour une description de fichier binaire. */  G_DEFINE_TYPE(GOpenidaBinary, g_openida_binary, G_TYPE_OBJECT);  | 
